Skip to content

SEO:建立 wuh.site 的搜索增长与技术 SEO 优化体系 #233

Description

@stack-wuh

背景

wuh.site 已具备 Next.js SSR、页面 metadata、robots、sitemap、RSS 和文章 JSON-LD 等基础能力,但目前整体更接近“GitHub Issues 内容展示站”,尚未形成独立的搜索内容资产。

对比 surmon.me,主要差距不在前端框架,而在:

  • 长期、持续、聚焦的技术内容积累;
  • 归档、分类、作者、相关文章等内部链接结构;
  • 稳定且唯一的文章 URL;
  • 内容原创性与站点主题权威;
  • 域名历史、外链和品牌搜索信号。

本 Issue 作为后续 SEO 优化总任务,后续可按 P0/P1/P2 拆分子 Issue 或 PR。

当前已发现的问题

P0:索引与规范化

  • Sitemap 使用 /post/{number},但文章 canonical 和站内链接使用 /post/{number}-{slug},存在 sitemap/canonical 不一致。
  • /post/[number] 当前通过 raw.split('-')[0] 解析文章编号,错误 slug 也可能返回同一篇文章,形成重复 URL。
  • 建立唯一 canonical URL;数字 URL、错误 slug、历史 slug 统一 301 到 canonical。
  • Sitemap 只输出 canonical URL,并确保所有可发布文章都被覆盖。
  • Sitemap 不再使用 limit=9999 一次性查询全部文章,改为分页或专用轻量接口。
  • Sitemap 的 lastModified 使用真实内容更新时间,不使用每次生成时的 new Date()。
  • Sitemap/API 异常时不能静默返回不完整结果,需要日志和告警。
  • 确认线上 robots.txt、sitemap.xml 返回 200,并在 Google Search Console/Bing Webmaster Tools 提交。

P0:缓存与抓取效率

  • 文章正文、metadata、结构化数据与点赞/浏览/评论等用户行为数据解耦。
  • 移除文章 SEO 页面对于匿名 Cookie 的不必要依赖。
  • 文章详情页从 revalidate: 0 调整为 ISR;发布/修改时通过 webhook 或 revalidateTag 触发失效。
  • 首页的 force-dynamic 重新评估,尽可能改为可缓存的 ISR 页面。

P0:低价值页面

  • /design/system-color 从 sitemap 移除,并设置 noindex。
  • 评估 /weread、/footprint 等个人数据页面是否具备独立搜索价值。
  • 对任意 labels 筛选组合设置 noindex, follow,仅为有独立介绍和内容价值的主题页开放索引。

P1:页面理解与站内结构

  • 在根布局补充统一 metadata:title.template、description、author、creator、publisher、默认 Open Graph 图片。
  • 为文章补充完整 BlogPosting:mainEntityOfPage、publisher、inLanguage、articleSection、keywords、wordCount 等。
  • 增加 Person、WebSite、ProfilePage 和 BreadcrumbList 结构化数据。
  • 文章 metadata 增加 authors、keywords、category、publishedTime、modifiedTime。
  • 默认生成 1200×630 的文章 OG 图片;没有封面时也保证可分享图片存在。
  • 将文章摘要从正则清洗 Markdown 改为 CMS 摘要优先、AST 第一段兜底。
  • 将 summary、keywords、coverAlt 设为内容发布时的规范字段。
  • 新增文章面包屑、相关文章、同系列文章、前后置文章和主题标签链接。
  • 新增年份归档、主题页、作者页、项目详情页,形成稳定的内部链接网络。
  • 为分页页和主题页设计明确的 canonical、title、description 与 robots 策略。

P2:内容与权威建设

  • 从“GitHub Issue 原文 + wuh.site 镜像”逐步升级为“wuh.site 原创编辑版本 + GitHub 协作/备份渠道”。
  • 文章增加 GitHub 没有的独立导言、摘要、延伸阅读、Demo、FAQ、项目复盘和相关链接。
  • 围绕 3~5 个长期主题建设内容集群:Next.js/React、TypeScript/Node/NestJS、设计系统、GitHub CMS、开源项目复盘。
  • 建立标题规范:优先描述具体技术问题、解决方案、对比或实践结果,减少无法表达搜索意图的泛化标题。
  • 为 GitHub README、项目文档、社交平台和其他站点建立回链入口。
  • 建立发布后 SEO 检查清单:canonical、sitemap、结构化数据、OG 图片、摘要、内部链接、Search Console 检查。

验收指标

技术指标

  • Sitemap 中的 URL 与 canonical 100% 一致。
  • 不存在错误 slug 返回 200 的重复文章 URL。
  • 文章详情页可缓存,正文不依赖用户 Cookie。
  • 低价值调试页和任意筛选组合不进入索引。
  • 结构化数据通过 Rich Results Test,无严重错误。

Search Console 指标

  • 已发现但尚未编入索引页面数量下降。
  • Sitemap 提交数与有效索引数逐步接近。
  • Google 选择的 canonical 与站点预期一致。
  • 技术文章的非品牌搜索展示次数持续增长。
  • 平均 CTR、平均排名和进入文章后的站内继续浏览率提升。

相关代码位置

  • packages/wuh.site.next/app/sitemap.ts
  • packages/wuh.site.next/app/robots.ts
  • packages/wuh.site.next/app/layout.tsx
  • packages/wuh.site.next/app/page.tsx
  • packages/wuh.site.next/app/post/[number]/page.tsx
  • packages/wuh.site.next/app/lib/slug.ts
  • packages/wuh.site.next/app/components/JsonLd.tsx
  • packages/wuh.site.nest/src/modules/content/content.controller.ts
  • packages/wuh.site.nest/src/modules/content/content.service.ts
  • packages/wuh.site.nest/src/modules/content/dto/content.dto.ts

建议执行顺序

  1. 先处理 URL、canonical、sitemap、robots 和低价值页面。
  2. 再处理文章缓存、metadata、结构化数据和 OG 图片。
  3. 然后建设归档、主题、作者、相关文章等内部链接结构。
  4. 最后通过原创内容和外部引用建立长期搜索权威。

该 Issue 只记录方案与验收标准,具体实现建议按 P0/P1/P2 拆分为多个小 PR,避免一次性大范围修改。

Activity

  1. stack-wuh commented on Jul 23, 2026

    @stack-wuh
    OwnerAuthor

    P0 implementation status

    已在隔离分支 codex/seo-p0 完成第一阶段 SEO 基础修复,提交:d9eb5a1。

    已完成

    • 统一文章 canonical URL 与 sitemap URL,sitemap 现在输出 /post/{number}-{slug}。
    • 增加错误 slug、数字 URL 到 canonical URL 的永久重定向。
    • 文章页移除匿名 Cookie 读取,公共文章内容改为 revalidate: 3600。
    • 首页移除 force-dynamic,保留各数据请求的 ISR revalidate。
    • Sitemap 改为分页读取,每页 100 条,使用真实 GitHub 更新时间。
    • Sitemap 异常时显式抛错,避免静默返回不完整 sitemap。
    • 移除 /design/system-color sitemap 条目,并设置 noindex, nofollow。
    • 增加全局 title template、description、author、creator、publisher。
    • 调整已有页面 title,避免启用 title template 后出现重复的 · wuh.site。
    • 新增 SEO P0 回归测试。

    验证结果

    • 前端测试:3 个测试文件、17 个测试用例全部通过(分文件串行执行)。
    • Oxlint:通过。
    • TypeScript:通过。
    • git diff --check:通过。
    • Next.js production build:当前环境的 Next build worker 在编译阶段发生 SIGSEGV,原工作区基线也可复现,暂未判断为本次代码错误;需要在 CI 或完整依赖环境再次验证。

    分支已推送:codex/seo-p0。

  2. moved this from Todo to In progress in PM@Next Timelineon Jul 23, 2026
  3. stack-wuh commented on Jul 25, 2026

    @stack-wuh
    OwnerAuthor

    Batch A+B 整合\n\n已将此前 8 个链式 PR 收敛为 #252(面向 main 的唯一集成 PR),旧 PR 已关闭并保留分支与提交记录。\n\n下一阶段已创建 Batch C:#253,涵盖默认 OG 图片、文章 metadata、Markdown AST 摘要和 About ProfilePage。

  4. stack-wuh commented on Aug 23, 2026

    @stack-wuh
    OwnerAuthor

    SEO Phase 2 提案

    shadow-docs/changes/20260823-P-seo-phase2/brief.md

    当前状态审计

    对比 Issue #233 的 checklist,P0 索引与规范化已全部完成 ✅。剩余未完成项:

    P0 缓存策略:

    • 首页仍有 force-dynamic,需改为 ISR
    • 文章详情页已改为 revalidate: 3600 ✅

    P0 低价值页面:

    • /design/system-color 是客户端组件,无显式 noindex metadata
    • /weread、/footprint、/guestbook 缺少 robots 策略

    P1 结构化数据:

    • BlogPosting 缺少 wordCount
    • 缺少年份归档页(/blog/[year])

    本轮计划

    1. 首页移除 force-dynamic,依赖数据层 ISR
    2. 四个低价值页面添加明确的 robots 策略
    3. 文章 JSON-LD 补充 wordCount
    4. 新增年份归档页形成内部链接网络

    具体见 brief 文件。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    chore项目架构调整优化

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions