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

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

- 原文链接: https://laojin.blog/blog/20261028_blog_seo_geo_fix
- 作者: 老金
- 发布日期: 2026-10-28
- 标签: SEO, GEO, Claude Code, Next.js, Cloudflare, 独立开发

---

![修了一行代码，博客 Google 曝光翻倍](https://pic-1258874139.cos.ap-hongkong.myqcloud.com/laojinblog/posts/20261028/00_cover.png)

我这个博客从今年 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` 一个文件里，其他地方都从这里引用。真正改掉错误的就是这一行：

```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 |
|---|---|---|
| 日均曝光 | 56 | 118 |
| 日均点击 | 5.5 | 8.7 |

![Search Console 过去 28 天：曝光从 10 月中旬开始明显抬升](https://pic-1258874139.cos.ap-hongkong.myqcloud.com/laojinblog/posts/20261028/01_search_console.png)

曝光翻了一倍多。但这段时间我也没停笔，修复上线后又发了 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 概览：各项指标都比上一周期涨了接近三成](https://pic-1258874139.cos.ap-hongkong.myqcloud.com/laojinblog/posts/20261028/02_ga_overview.png)按渠道拆开：

| 渠道 | 会话 | 占比 | 平均互动时长 |
|---|---|---|---|
| Direct | 2,354 | 80% | 0 秒 |
| Organic Search | 367 | 12% | 35 秒 |
| Unassigned | 142 | 5% | 5 秒 |
| Referral | 44 | 1.5% | 14 秒 |
| AI Assistant | 3 | 0.1% | 26 秒 |

![GA 按渠道拆开：Direct 占八成，平均互动时长 0 秒](https://pic-1258874139.cos.ap-hongkong.myqcloud.com/laojinblog/posts/20261028/03_ga_channels.png)

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 优化博客浏览量，具备一定效果，但这个优化是长期工作，需要根据关键词和所需不断优化。
