返回博客

修了一行代码,博客 Google 曝光翻倍

作者 约 5 分钟读完

博客全站 canonical 指向一个不存在的域名,让 Claude Code 排查修复了 SEO 和 GEO。三周后 Google 曝光翻倍。附改动清单、三周数据和自查清单。


修了一行代码,博客 Google 曝光翻倍

我这个博客从今年 1 月写到现在,原创 90 多篇,日访问量一直在 80 上下晃。

我一直以为是内容不够多、选题不够准。这个月初让 Claude Code 把整个站的 SEO 和 GEO 过了一遍,第一个问题就把我看傻了。


全站都在说"正式版在另一个地方"

博客线上的域名是 laojin.blog。

Claude Code 翻代码时发现,每个页面的 canonical、sitemap 里的 339 个 URL、robots.txt 里的 sitemap 地址、分享卡片的 og:url,写的全是 blog.laojin.dev。

它顺手 dig 了一下这个域名:NXDOMAIN,注册局里查无此域。

这个域名应该是建站初期打算用、后来换掉了。代码里 14 个文件各写死了一份,没人记得改。

canonical 是告诉搜索引擎"这篇内容的正式地址在哪"。也就是说,过去这大半年,我每一页都在对搜索引擎说:别收录我,正式版在一个打不开的地方。Google 有时候会自己判断、不理会错误的 canonical,但这种状态下想拿到正常排名,基本是在碰运气。

修法很简单:站点域名收到 src/lib/site.ts 一个文件里,其他地方都从这里引用。真正改掉错误的就是这一行:

export const SITE_URL = (process.env.NEXT_PUBLIC_SITE_URL || "https://laojin.blog").replace(/\/$/, "");

以后换域名也只改这一处。


有几个 AI 爬虫拿到的是 403

GEO 指的是让 ChatGPT、Claude、Perplexity 这些 AI 回答问题时,能读到并引用你的内容。前提是它们的爬虫进得来。

Claude Code 用不同爬虫的 User-Agent 挨个访问文章页:

  • Googlebot、bingbot、Baiduspider:200
  • OAI-SearchBot、ChatGPT-User、PerplexityBot、Claude-SearchBot:200
  • GPTBot、ClaudeBot、Bytespider:403

返回 403 的是 Cloudflare。我去 Security → Bots 里看,三类 AI 爬虫(Search、Agent、Training)显示的都已经是 Allow。再测一遍,全部 200。之前那次 403,大概是设置还没生效时测到的。

同一个页面里还有个「Bot fight mode」,Cloudflare 的安全建议一直在劝我打开。我没开,它会给爬虫弹验证页,对博客来说误伤搜索引擎的风险比它挡掉的那点垃圾流量大。


代码里改了什么

改动连文章内容一起,一次提交 51 个文件。生产构建通过后,Claude Code 在本地起服务逐项核对过。挑重要的说。

分享图和结构化数据

之前全站没有 og:image,链接发到微信、X 上就是一个光秃秃的标题。现在文章页用自己的封面,没封面的用一张统一的默认卡片。JSON-LD 结构化数据补了网站、作者、文章三层:文章带上封面、字数、发布和更新时间,作者带上 X 和 GitHub 主页。搜索引擎和 AI 判断"这篇是谁写的",这些是主要依据之一。

转载文章单独处理,标出原作者和原文链接。35 篇转载里,有 20 篇能从正文里的"原文链接"自动识别出处,剩下的得我自己补。

分页一直是首页的"复制品"

首页和列表页原来用 ?page=2,动态渲染,canonical 全指回首页。第 2 页以后的列表,在搜索引擎眼里都是首页的重复。现在改成静态的 /page/2,canonical 指向自己,旧链接 301 过去。顺带首页也从动态页变成静态页了。

191 个只有一篇文章的标签页

263 个标签里,191 个只挂了一篇文章。

这种页面几乎没内容,收录太多对整站没好处。少于 2 篇的标签页加了 noindex、移出 sitemap;剩下的标题改成"Claude Code 相关文章(47 篇)"这种带信息量的写法。

sitemap 的日期别用"今天"

原来首页、列表页、标签页的更新时间都是 new Date(),每次构建都变成当天。内容没变、日期天天变,搜索引擎慢慢就不信这个字段了。现在全部取相关文章的真实日期。

零碎的

  • 每篇文章底部加了"相关文章",按共同标签和系列推荐 4 篇
  • 有 5 篇正文开头又写了一遍 # 标题,页面上出现两个 H1,现在渲染时自动处理
  • 57 张图的 alt 是 img1、img2,改成用文章标题兜底
  • 封面立即加载,其余图片懒加载
  • 文章页加了作者署名和阅读时长

给 AI 准备的入口

llms.txt 原来是手写的静态文件,内容早过时了,现在按文章自动生成。另外加了 llms-full.txt,把全部原创正文合成一个文件。每篇文章 URL 后面加 .md 能直接拿到 Markdown 原文,这个地址带 noindex,不和正文页抢排名。robots.txt 里各家 AI 爬虫逐个写明放行。

主动推送

以前发了文章就干等搜索引擎来抓。现在部署完自动把最近有变动的 URL 推给 IndexNow,Bing 认这个,而 ChatGPT 搜索用的是 Bing 的索引。配了 token 的话也推百度。推送失败不影响部署。

文案

11 篇文章的 description 要么太短,要么缺失,要么把标题原样抄一遍,逐篇对照正文重写了。最离谱的一篇写的是"老金一月份的总结。",九个字。

另外「Skill 工程化实战指南」一到四篇终于设成了系列,有了独立的系列页。


代码管不到的部分,我自己点

  • www 跳转:www.laojin.blog 原来能直接打开,同一篇内容两个地址。在 Cloudflare 的 Redirect Rules 里用「Redirect from WWW to root」模板加一条 301,记得勾上 Preserve query string
  • Cloudflare 打开 Always Use HTTPS
  • Google Search Console 用 DNS 方式验证,在 Cloudflare 加一条 TXT 记录就行,不用动代码,然后提交新 sitemap
  • Bing Webmaster Tools 直接从 Google Search Console 导入
  • 全量推送一次 IndexNow

刚提交 sitemap 时,Search Console 显示"无法抓取",我以为又出问题了。查了一圈,线上 sitemap 是好的,Googlebot 的 UA 访问也是 200。新建的资源,Google 往往要过几小时到一两天才真正去抓。


三周后的数据

修复是 10 月 7 日上线的,到 10 月 27 日正好三周。把 GA、Search Console、Cloudflare 三边的数据拉出来对了一遍,跟我预想的不太一样。

先说好消息。Search Console 的每日数据:

修复前(9/28–10/7)10/15–10/25
日均曝光56118
日均点击5.58.7

Search Console 过去 28 天:曝光从 10 月中旬开始明显抬升

曝光翻了一倍多。但这段时间我也没停笔,修复上线后又发了 8 篇。曝光开始跳涨的 10 月 15 日,正好是 Strata + Qwen 那篇教程发布的日子,这一篇自己就拿了 375 次曝光、44 次点击。两件事的功劳分不开,我只能说:域名修好了,新文章才有机会被正常收录。

靠内容搜进来的,几乎全是本地部署大模型:strata mac、strata 部署、strata 教學、qwen-image 本地部署、qwen 3.8 27b 本地部署。我写了几十篇 Claude Code,搜索流量反而是这几篇本地部署教程拿到的。

在 GA。28 天 2,949 次会话,比上一个周期多了 27.7%,看着挺好。

GA 概览:各项指标都比上一周期涨了接近三成按渠道拆开:

渠道会话占比平均互动时长
Direct2,35480%0 秒
Organic Search36712%35 秒
Unassigned1425%5 秒
Referral441.5%14 秒
AI Assistant30.1%26 秒

GA 按渠道拆开:Direct 占八成,平均互动时长 0 秒

GEO 这边更直接:AI Assistant 渠道 28 天 3 次会话。爬虫放进来了,llms.txt 也有了,但三周内还看不出 AI 开始引用这个博客。


照着查的清单

如果你的博客流量也一直起不来,先花半小时看看这几项:

  • 随便打开一篇文章,看源码里的 canonical 是不是你现在的域名
  • 打开 /sitemap.xml,看里面的 URL 是不是你现在的域名
  • 打开 /robots.txt,看 Sitemap 那一行
  • 用 curl -A "GPTBot" 访问一篇文章,看是不是 200
  • www 和 http 版本有没有 301 到主域名
  • 分页、标签页的 canonical 是不是指向自己
  • 部署后从外部再抓一次页面,确认线上真的变了
  • 在 GA 里把自己的 IP 设成内部流量排除掉,再看数据

前三项查起来不到一分钟。


整个过程里,dig 域名、换 User-Agent 测、对比响应头、写脚本扫 145 个页面,都是 Claude Code 自己干的。我做的是按它说的去 Cloudflare 和宝塔里点几下,把截图贴回去。 从目前看,AI 优化博客浏览量,具备一定效果,但这个优化是长期工作,需要根据关键词和所需不断优化。