moodji.net 运营报告 — 2026-08-15 (run 13)
取数:GSC(90d/28d)· Vercel Analytics + Firewall + Deployments · Bing AI Performance/URL 检查 · Keywords Everywhere · 仓库 · 线上站点。 上轮:2026-08-10 (run 12)。间隔仅 5 天,多数 90d 指标属同一窗口内的小步移动,读 delta 不读绝对值。
0. 总览数字
GSC 90d:点击 942 / 曝光 29,800 / CTR 3.2% / 平均排名 10.8 对比 07-12 baseline(339 / 13,700 / 2.5% / 9.6):点击 2.8×、曝光 2.2×、CTR +0.7pt。排名 9.6→10.8 变差,是新增大量低位曝光摊薄分母所致,非老页下滑。
Vercel 7d(Aug 8–15):访客 836(+11%)/ PV 1,276(-2%)/ 跳出 84%(+5%)
渠道(可辨识引荐 428):google 280 + google.com.hk 11 = 291(68%) · bing 44+23 = 67(16%) · naver 46+12 = 58(14%) · tw.yahoo 12(3%) → Google 份额 run7 39% → run9 55% → 本轮 68%,连续三轮回升;非 Google 仍占 ~1/3。
国家:CN 36%(含自测污染)· KR 22% · JP 13% · TW 13% · US 6%
1. 🔴 P0 发现:线上 sitemap 由一个「以为已废弃」的硬编码脚本生成,漏了 15 个 URL
事实链
| 检查 | 结果 |
|---|---|
| 线上 sitemap.xml | 437 个 URL,含 157 个 /docs/,apple-watch 0 个、/app/ 0 个 |
| 页面是否活着 | /apple-watch/body-battery/ 及 5 语言变体全部 200 + 正确渲染 |
| 最新生产部署 | 4d4885d (Aug 10) Ready —— 含专题页的构建确实上线了 |
| Bing 索引 | /apple-watch/body-battery/ 未发现(上线 5 天) |
/__sitemap__/en.xml | 404 —— Nuxt sitemap 模块的产物根本没被服务 |
根因
scripts/build/build_nuxt.sh 里:
if [ -f "$nuxt_output_dir/sitemap.xml" ]; then cp ...
else generate_sitemap() # → web/scripts/generate-sitemap.esm.js(硬编码路由表)
fiNITRO_PRESET=static 下 @nuxtjs/sitemap 不产出根 sitemap.xml → fallback 每次都触发,线上 sitemap 一直由 legacy 脚本生成。线上那 157 个 /docs/ 就是铁证 —— 只有 legacy 脚本才有 INCLUDE_DOCS 扫描逻辑,Nuxt 模块完全不知道 VuePress 文档的存在。
该脚本的路由表是手写的:tools/articles 从 JSON 遍历,其余靠人记得添加。habits 当初被显式加了(第 316 行),/app/ 和 /apple-watch/* 从未加过。
影响
漏掉 3 个路由族 × 5 语言 = 15 个 URL:
/apple-watch/+/apple-watch/body-battery/— run 12 的旗舰页,站内唯一直接指向 App 安装的入口,上线 5 天零发现渠道(仅首页一条内链)/app/— Moodji App 产品详情页,自建站起从未进过 sitemap
GSC 实测(本轮用 URL 检查逐条打)
| URL | Google 判定 |
|---|---|
/app/ | ✅ 网页已编入索引 |
/ko/app/ | ❌ 未编入索引 — Google 无法识别此网址 |
/apple-watch/body-battery/ | ❌ 未编入索引 — Google 无法识别此网址 |
/ko/apple-watch/body-battery/ | ❌ 未编入索引;发现面板:「未检测到任何引荐站点地图」+「未检测到引荐来源网页」 |
→ 新结论:内链发现只对默认 locale 生效。 EN /app/ 靠首页内链被 Google 自己爬到了,但同样有内链的 /ko/app/ 没有。对非默认 locale 页面来说,不在 sitemap ≈ 没有发现路径 —— 这把 sitemap 缺口的严重性从「新页慢一点」抬到「4/5 的语言版本可能永远进不去」。
⚠️ 自查记录:我第一次读这几条时把静态文案「仅已编入索引的网址有增强选项」当成了判定结果,误报两条为「已编入索引」,核对面板回显 URL 后才发现。这正是本节批评 run 12 的同一种假绿,当场自查抓住并更正。
第二重锁:IndexNow 也漏
scripts/indexnow-ping.mjs 的 collectDiffUrls() 只匹配两类文件:
/^web\/data\/([^/]+)\/toolsData\.json$/ // → /tools/<slug>/
/^web\/data\/([^/]+)\/articles\.json$/ // → /article/<id>/新建的是 .vue 路由页(web/pages/apple-watch/body-battery.vue),两个正则都不匹配 → 本次变更 0 个内容 URL → 从不推送。且它的 resolveUrl 依赖 sitemap 产物查规范 URL,sitemap 漏了它就更查不到 —— 两个缺陷互相锁死。
共同形态:非工具/非文章的新路由页 = 搜索引擎不可见。 habits Hub 当初只是因为有人手工补了硬编码才幸免。
🔴 run 12 的验证是假绿
run 12 日志写「5 个子 sitemap 全部收录」—— 验的是本地 dist/__sitemap__/*.xml(Nuxt 模块产物,确实包含 apple-watch),但那个产物线上 404、根本不被服务。
可复用教训:验证必须打到线上实际被服务的那个产物,不是本地构建目录里同名的东西。这与 run 12 自己记的「只跑 web build 覆盖不到 docs 的 vuepress build」是同一类错误 —— 同一个错误连续两轮换个马甲重演。
2. 簇级模型(天花板 × 捕获率 × 杠杆)
2.1 体脂/体成分(KR 现金牛)— 稳,不动
ko/body-fat 90d 276 点击 / 7,461 曝光 / 3.7% / pos 6.0(5 天 +27 点击)
- 天花板:曝光反推 ~3.5k/月(KE 的 KR 国别量不可用)
- 捕获率:~92 点击/月 ÷ 3.5k ≈ 2.6%(run7 为 1.7%,在改善)
- 位置-CTR 基准:pos 6 → 基准 ~5%,实际 3.7%(低 26%)。run7 已判定为 SERP-feature 限制而非标题缺陷,本轮维持。
- 主杠杆仍是位置前推(pos 6→3 ≈ 2.2×),非 CTR 微调。
2.2 JP 体成分(ja/ffmi)— 第二引擎,增速全站第一
90d 73 点击 / 3,255 曝光 / 2.2% / pos 8.6(5 天 +17 点击 / +802 曝光)
- 位置-CTR 基准:pos 8.6 → ~2.5%,实际 2.2% = 达标。杠杆在位置不在标题(与 body-fat 同结论)。
- 站内对照(ja/stress pos 4.2 → CTR 15.1%)推 pos~4 约 6–7×,推 pos6 约 2.5×。
- ⚠️ 08-09 改标题的功劳判不了:CTR 2.3%→2.2% 几乎没动,涨的全是曝光/覆盖面。这更像自然爬坡而非标题在赢点击。 词级验收 08-30。
2.3 🟢 注意力 / schulte-table — 本轮最硬的新机会(三源交叉印证)
| 证据源 | 读数 |
|---|---|
| KE 全球量 | schulte table 40,500/月,competition 0.01 |
| Bing AI 引用页 | zh/schulte-table 55 次(run 12 时仅 7 次,8 天约 7×) |
| Bing grounding query | 1到25找数字的专注力游戏 12次 100% share · 25个数字打乱的专注力训练 10次 83.33% · 舒尔特表测试 4次 100% |
| Vercel 真实流量 | zh-TW/schulte-table 36 访客 = 全站第 3 页 |
| GSC | 不在 90d top-10 页(<21 点击/90d)→ Google 捕获率 <0.05% |
- 100% citation share 意味着这些问题上我们基本是唯一来源 —— 份额已无上行空间,增量只能来自提问量。
- 渠道错配重演:AI 引
zh/,真实流量落zh-TW/,Google 排的是zh-TW/stroop。同一簇三条渠道命中三个不同 locale 页。 - 诚实边界(下注前的阻塞项):本轮没拿到 schulte 页在 GSC 的曝光/位置(GSC 只渲染 top-10 行,rows-per-page 与 URL 过滤参数均不生效)→ 判不了是「Google 没判定我们相关」还是「位置太靠后」。这两种情况的对策完全相反,补到数据前不投入。
2.4 Vitals / blood-oxygen — 从「零数据」转正
ja/blood-oxygen30 次 AI 引用;grounding血中酸素濃度正常値一覧10次 @10.53%- 天花板:
blood oxygen level normal22,200(拉丁词,可信);spo2 正常値返 135,000 —— 疑似 KE 词根塌缩(与ffmi 計算=40,500 同病),不可信,不引用 - Google 捕获 ≈ 0。数据仍太薄,观察不动,但 config 里「尚无数据」的标注应更新。
2.5 心理簇 — 健康
ja/stress 61/403/15.1%/pos 4.2(CTR 远超 pos4 基准 ~9%);AI 引用 154 次居全站第一(+15)。PSS 词族 grounding 继续涨(pss ストレス尺度 36→42、perceived stress scale 12→18)。anxiety/depression/dass 仍未进 GSC top-10。
2.6 Apple Watch 专题页 — 词在季节性回落
KE 全球 apple watch body battery 2,400(comp 0.04),但趋势 3月 5,400 → 6/7月 880。run 11 记的 590 是 US 口径,量级口径需更正。→ 该页的接词确定性低于立项时的判断,别把它当高确定性赌注;它的主要价值仍是站内唯一的 App 安装入口。
3. 🔴 AI 引用(GEO)结构变化
总量:3 个月 682 次引用 / 日均被引用页面 6 个(run 11:07-18~08-07 为 521 次)→ 8 天新增 ~161,日均 ~20(此前 ~25),总量微降。
关键结构变化 —— 老词冻结、新词接棒:
| Grounding Query | run 11 | 本轮 | Δ |
|---|---|---|---|
| stroop测试 | 108 | 108 | 0 |
| 壓力知覺量表 | 25 | 25 | 0 |
| 腰高比 | 18 | 18 | 0 |
| apple watch心情检测app | 15 | 15 | 0 |
| pss ストレス尺度 | 36 | 42 | +6 |
| perceived stress scale | 12 | 18 | +6 |
| focus test | — | 15 | 新 |
| 1到25找数字的专注力游戏 | — | 12 (100%) | 新 |
| 血中酸素濃度正常値一覧 | — | 10 | 新 |
| 25个数字打乱的专注力训练 | — | 10 (83%) | 新 |
| 舒尔特表测试 | — | 4 (100%) | 新 |
→ run 12 自我证伪的「stroop 引用份额已近上限」被进一步坐实:8 天零新增。增长完全来自 schulte / focus / blood-oxygen 三条新线。
被引用页 top(48 条,3 个月):ja/stress 154(+15)· zh/stroop 124(+6)· zh/schulte-table 55(新) · zh/ 首页 40 · zh-TW/stress 36 · ja/blood-oxygen 30(新) · zh/wellbeing 22 · EN/burnout 21 · EN/focus 15 · zh-TW/whtr 14 · zh-TW/adhd 14 · ja/exercise-intensity 13
语言分布(top 25):zh ~276 · ja ~217 · zh-TW ~73 · en ~52 · ko 0
✅ run 12 悬案结案:ko 的 AI 空白不是收录问题
run 12 留问「是 Copilot 韩语覆盖弱,还是我们的 ko 页检索不到」。本轮用 Bing URL 检查实测 ko/tools/body-fat-calculator/:
已成功编制索引 —— 该 URL 可以在必应上显示
→ ko 页在 Bing 索引内、完全可被检索。零引用的原因在 Copilot 韩语侧或韩语提问量,不在我们这边 → 不可控,不投入。 此项从待办移除。
副产品:Bing 同时报该页 缺少 Meta Language 标记 警告(1 处)。全站 5 语言均可一行补齐,成本近零,但对引用量有无影响完全未经验证 —— 列为低成本/低确定性备选,不作为本轮主张。
4. 转化漏斗 —— 首次可测(08-09 埋点上线后第一次读数)
| 事件 | 访客 | 总次数 | 口径 |
|---|---|---|---|
tool_calculate | 186 | 250 | 22.2% 的站点访客真的算了一次 |
tool_cta_click | 13 | 31 | 7.0% 的计算者点了下游 CTA |
challenge_arrival | 5 | 9 | PK 链接落地 |
challenge_complete | 1 | 2 | |
challenge_share | 1 | 4 |
- ✅ 预测 #4(08-05,挂账两轮)判定成立:三个 PK 事件计数均 ≥1,埋点通道确认可用。但量极小(每周 4 次分享),PK 作为传播通道目前基本不成立,不加投。
- 🔴 跳出率 84% 与 22.2% 真实使用率并存 → bounce 对工具站是坏指标(单页会话即计跳出,而用户在页内算完就走恰恰是成功)。此后参与度改用
tool_calculate覆盖率,不再拿 bounce 说事。 - ⚠️ run 11 埋点验收项只完成一半:「覆盖多少 slug」未取到 —— Vercel 事件属性下钻没打开。下轮补。
5. ✅ 警报解除:全站 403 是取数工具失效,不是事故
开局 curl 全站 403 + x-vercel-mitigated: challenge(含 robots.txt / sitemap.xml / *.vercel.app),Googlebot 与 bingbot UA 同样被挡。Vercel Firewall 面板实读:
| 项 | 状态 |
|---|---|
| Custom Rules | 0 |
| Bot Protection | Off / Inactive |
| Attack Mode | 未开启 |
| IP Blocking / System Bypass | 无 |
→ 挑战来自 Vercel 平台自动 DDoS 系统缓解(过去 1 小时 DDoS Mitigation 151 次)。过去 1 小时:Allowed 541 / Denied 133 / Challenged 18 —— 绝大多数流量正常放行,curl 属于那 18 个。Firewall 的 Top User Agents 里 Googlebot 14 次在列,GSC 数据正常增长 → 爬虫无恙。
教训:
curl对 moodji.net 已永久失效(07-18 尚可用),此后线上复核一律走浏览器。危险之处在于 curl 拿回的 403 挑战页长得就像「页面挂了」,极易误判成事故 —— 本轮开局差点按 P0 事故写。
6. 可证伪预测(写死,含失败含义)
| # | 验收日 | 预测 | 失败说明什么 |
|---|---|---|---|
| 1 | 08-25 | 基线已实测(见 §1:4 条中仅 EN /app/ 已收录)。sitemap 修复 + 本轮 3 条催收录后,/ko/app/、/apple-watch/body-battery/、/ko/apple-watch/body-battery/ 至少 2 条转为「已编入索引」 | 问题不在发现渠道,而在页面本身(质量/重复内容/薄内容判定)→ 需重审页面而非管线 |
| 2 | 08-30 | ja/ffmi pos ≤7.5 且「筋肉量」词族出现在 GSC 28d 查询表 | 08-09 标题改动无效,ffmi 增长纯自然爬坡 → 停止把该 JP 标题模式复制到其他 locale |
| 3 | 08-29 | 补到 GSC 页面级数据后,zh/ 或 zh-TW/schulte-table 90d 曝光 ≥300 | 若 <100,schulte 需求确实不在 Google(只在 AI/直接)→ Google 侧永久不投入 |
| 4 | 08-22 | tool_cta_click / tool_calculate 比值 ≥10%(本轮 31/250 = 12.4%) | 骤降则本轮读数是埋点上线首周的新鲜度假象,漏斗基线要重设 |
7. 行动计划 P0→P4
P0 收录/健康
- ✅ 已执行:IndexNow 手工补推 10 个 apple-watch URL(5 locale × hub/专题页),HTTP 200 受理
- ✅ 已执行:GSC「请求编入索引」3 个未收录 URL(
/ko/app/、/apple-watch/body-battery/、/ko/apple-watch/body-battery/),均返回「已将网址添加到优先抓取队列」,未触发配额上限 - 🔧 已改好待批(需 build + push):
web/scripts/generate-sitemap.esm.js补/app/+/apple-watch/+/apple-watch/body-battery/× 5 locale。本地实跑验证通过:15 个新 URL 全部正确生成(不含 docs 时 295 → 生产约 452) - 📋 待批(代码改动):
scripts/indexnow-ping.mjs增加web/pages/**/*.vue变更检测,堵住「新路由页从不 ping」的结构盲区
P0 旁支:GSC「未找到 (404)」验证失败(本轮撞见,未列入行动)
GSC 网页索引编制报告有一条 未找到 (404) 验证失败(开始 6/24、失败 7/1,99 待定 / 33 失败)。抽样实测两类:
/en/tools/tdee-calculator/→ 已 301 到/tools/tdee-calculator/,正常 —— GSC 那批是 6 月抓取的旧数据,vercel.json的/en/:path(.*)重定向已生效/docs/en/zh-TW/guide/handbook/data_n_status.html→ 真 404,locale 嵌套 locale 的畸形路径(疑似 docs 语言切换器拼接 bug)
→ 前者已自愈,后者属 docs 站。用户 08-10 已定「docs 不再投入」,故不立项,仅记录。危害有限(404 是正常状态码,不传递负信号)。
P1 CTR —— 本轮为空,且这是数据结论不是遗漏
主要页面 CTR 对照位置基准全部达标或超标:ja/stress 15.1%@pos4.2 · zh-TW/stroop 19.4%@6.2 · ja/focus 12.4%@6.5 · 首页 6.4%@5.1 · EN steps-goal 3.0%@9.9 · EN focus 1.7%@13.6 · ja/ffmi 2.2%@8.6。唯一低于基准的 ko/body-fat(3.7%@6.0)已判定受 SERP feature 压制。标题层面全站无可做之事。
P2 市场/流量
- Google 份额回升至 68%,KR 仍是 Google 现金牛
- ko 的 AI 空白结案为不可控,不投入(§3)
P3 内容/关键词
- schulte 簇是唯一有三源交叉印证的机会,但被预测 #3 阻塞 —— 补到 GSC 页面级数据前不下注
- 不新建工具(run 10 结论仍有效:新工具量递减)
P4 监控
08-22 埋点比值 · 08-25 收录 · 08-29 schulte 曝光 · 08-30 ffmi 词族 · 每轮 Bing AI Performance
8. 数据缺口(诚实标注)
| 缺口 | 影响 |
|---|---|
GSC 只渲染 top-10 行;rows-per-page 点击与 URL 过滤参数(&query=)均不生效,chips 显示 查询:undefined | schulte / blood-oxygen / apple-watch 的页面级与词级数据全部未取到 —— 直接阻塞预测 #3 |
| Vercel 事件属性下钻未打开 | tool_calculate 的 slug 覆盖度未知,run 11 验收项只完成一半 |
KE 的 CJK / JP 量再次复现不可信(舒尔特/血氧中日词返 0;spo2 正常値 疑似词根塌缩返 135,000) | CJK 天花板一律用 GSC 曝光反推,不引 KE |
curl 对本站永久失效(Vercel 自动缓解) | 线上复核必须走浏览器 |
| Vercel Analytics CN 36% 含自测污染;7 天样本 | 国家占比方向可信,绝对值别当真 |
| GSC URL 检查深链 404,未取到 Google 侧对新页的收录判定 | 预测 #1 的基线未建立,验收时只能看结果不能看变化量 |
browser-harness 在 GSC/Bing 重型 SPA 上多次崩连接(no close frame received),每次断连 Chrome 重弹授权 | 取数中断 3 次,与 run 8 记录同源 |