Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a503fa9cbe | |||
| 66dd288015 |
Executable
+8
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||||
|
export ADM_API_PORT="${ADM_API_PORT:-8085}"
|
||||||
|
export NODE_BIN="${NODE_BIN:-/opt/homebrew/opt/node@24/bin/node}"
|
||||||
|
export PATH="/opt/homebrew/opt/node@24/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:${PATH}"
|
||||||
|
cd "${ROOT}"
|
||||||
|
exec "${NODE_BIN}" server/index.mjs
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||||
|
export ADM_PORT="${ADM_PORT:-5174}"
|
||||||
|
export NODE_BIN="${NODE_BIN:-/opt/homebrew/opt/node@24/bin/node}"
|
||||||
|
export PATH="/opt/homebrew/opt/node@24/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:${PATH}"
|
||||||
|
cd "${ROOT}"
|
||||||
|
if [[ ! -d dist ]]; then
|
||||||
|
echo "dist/ missing; run npm run build first" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
exec "${NODE_BIN}" ./node_modules/vite/bin/vite.js preview --host 0.0.0.0 --port "${ADM_PORT}" --strictPort
|
||||||
@@ -4,18 +4,18 @@ import type { MindSpaceAdminConfig, MindSpaceSeoGeoConfig } from '../../types';
|
|||||||
|
|
||||||
function defaultSeoGeoConfig(): MindSpaceSeoGeoConfig {
|
function defaultSeoGeoConfig(): MindSpaceSeoGeoConfig {
|
||||||
return {
|
return {
|
||||||
enabled: false,
|
enabled: true,
|
||||||
seo: {
|
seo: {
|
||||||
enabled: false,
|
enabled: true,
|
||||||
canonical: true,
|
canonical: true,
|
||||||
sitemap: false,
|
sitemap: true,
|
||||||
robotsTxt: false,
|
robotsTxt: true,
|
||||||
baiduPush: false,
|
baiduPush: true,
|
||||||
},
|
},
|
||||||
geo: {
|
geo: {
|
||||||
enabled: false,
|
enabled: true,
|
||||||
jsonLd: false,
|
jsonLd: true,
|
||||||
llmsTxt: false,
|
llmsTxt: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -122,7 +122,7 @@ export function MindSpacePage() {
|
|||||||
<section className="admin-card">
|
<section className="admin-card">
|
||||||
<h2>SEO / GEO</h2>
|
<h2>SEO / GEO</h2>
|
||||||
<p className="muted">
|
<p className="muted">
|
||||||
仅对「已确认公开、access_mode=public、status=online」的发布页生效。私有、密码、登录可见或未确认页面会强制 noindex,不会进入 sitemap / llms.txt。
|
对「公开、在线、未过期」的发布页注入 SEO/GEO。密码、登录可见、仅本人或已过期页面仍强制 noindex,不会进入 sitemap / llms.txt。生产库若仍是旧的全关配置,请点「全部开启」后保存。
|
||||||
</p>
|
</p>
|
||||||
<div className="admin-form">
|
<div className="admin-form">
|
||||||
<label className="admin-form-row">
|
<label className="admin-form-row">
|
||||||
@@ -203,6 +203,14 @@ export function MindSpacePage() {
|
|||||||
<button type="submit" className="send-btn" disabled={busy || loading}>
|
<button type="submit" className="send-btn" disabled={busy || loading}>
|
||||||
{busy ? '保存中...' : '保存配置'}
|
{busy ? '保存中...' : '保存配置'}
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className="ghost-btn"
|
||||||
|
onClick={() => setSeoGeo(defaultSeoGeoConfig())}
|
||||||
|
disabled={busy || loading}
|
||||||
|
>
|
||||||
|
全部开启
|
||||||
|
</button>
|
||||||
<button type="button" className="ghost-btn" onClick={() => void load()} disabled={busy}>
|
<button type="button" className="ghost-btn" onClick={() => void load()} disabled={busy}>
|
||||||
重新加载
|
重新加载
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ export function SeoGeoAnalyticsPage() {
|
|||||||
<div className="admin-page-head">
|
<div className="admin-page-head">
|
||||||
<h2>SEO / GEO 流量</h2>
|
<h2>SEO / GEO 流量</h2>
|
||||||
<p className="muted">
|
<p className="muted">
|
||||||
列出全部在线公开页(含零流量页面),仅展示统计与 URL,不提供跳转访问。SEO / GEO 来源按 referrer 域名归类;爬虫按 User-Agent 识别。
|
列出全部在线页(含零流量页面),仅展示统计与 URL,不提供跳转访问。可收录 = 公开且未过期。SEO / GEO 来源按 referrer 域名归类;爬虫按 User-Agent 识别。
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user