Appearance
博客 SEO 技术重构:从每月 6 次点击到 Google 稳定收录
1. 问题暴露:上线快一年,为什么只有几十次点击?
2025 年 8 月 30 日,我的技术博客正式上线。作为一个 Golang 开发者的个人技术博客,我认真写着每一篇文章,涵盖 Linux、Kubernetes、Golang 源码分析、CI/CD 实践等方向。
快一年后,我去查看 Google Search Console(以下简称 GSC)的数据,结果令人困惑:
| 时间周期 | 总点击次数 | 总曝光次数 | 平均点击率 | 平均排名 |
|---|---|---|---|---|
| 过去 28 天 | 6 | 48 | 12.5% | 13.9 |
| 过去 6 个月 | 11 | 898 | 1.2% | 26.3 |
| 上线至今(12个月) | 28 | — | 0% | 30.9 |
GSC 28天效果报告
GSC 6个月效果报告
GSC 12个月效果报告
数据一目了然:过去28天只有6次点击,过去6个月只有11次点击,上线至今累计28次点击。对于一个上线快一年的技术博客来说,这个数字几乎等于零曝光。
更奇怪的是,我的 robots.txt 明明是正确的:
text
User-agent: *
Allow: /
Sitemap: https://fishfinal.com/sitemap.xml站点地图也已正常提交,所有配置看起来都没问题。为什么 Google 不持续收录和展示我的文章?
2. 拨云见日:找到真正的技术障碍
2.1 偶然的发现
在我排查 Cloudflare 设置时,发现了一个可疑的选项。
在 Cloudflare 仪表板的 “Control AI crawlers” 卡片中,有一项 “Block AI training bots”:

点击后,我看到了一个下拉选项:
- Block on all pages(当前选中)
- Block only on hostnames with ads
- Do not block (allow crawlers)
我把它改成了 Do not block (allow crawlers)。
2.2 但问题并没有解决
奇怪的是,修改后访问 https://fishfinal.com/robots.txt,内容依然没有变化。文件中仍然充斥着 Cloudflare 的托管规则,最致命的是这一行:
text
User-agent: Google-Extended
Disallow: /
Google-Extended 是 Google 专门用于 AI 训练和内容理解的爬虫。屏蔽它,会被 Google 解读为“网站管理员对内容用于搜索相关的 AI 处理持保留态度”,从而连带影响主爬虫 Googlebot 的抓取意愿。
这就是问题的根源!
2.3 最终解决方案
在反复尝试后,我发现在同一个卡片中,还有一项设置:“Manage your robots.txt”,下面有一个 “Disable robots.txt configuration” 的按钮。


点击后,Cloudflare 不再托管 robots.txt,而是直接透传我服务器上的静态文件。
再次访问 https://fishfinal.com/robots.txt,内容终于变成了我想要的简洁版本:
text
User-agent: *
Allow: /
Sitemap: https://fishfinal.com/sitemap.xml
经验总结:Cloudflare 的“Block AI training bots”对于新站来说是隐形杀手。如果你需要 SEO,请务必检查并关闭它,或者直接禁用 Cloudflare 对
robots.txt的托管。
3. 釜底抽薪:重构博客目录结构
3.1 为什么需要重构?
解决 robots.txt 问题后,我发现收录情况略有改善,但仍然不理想。我开始审视博客的目录结构。
原有的目录结构:
docs/
├── golang/
│ ├── concurrent-safe-local-map.md
│ └── deploy-production-fhs-standard.md
├── linux/
│ ├── fhs-standard.md
│ └── syslog/
│ └── syslog-basics-protocol-rsyslog.md
├── kubernetes/
│ └── csi-deep-dive-guide.md
├── security/
│ └── domain-hijacking-forensics-go.md
└── index.md对应的 URL 结构是:
https://fishfinal.com/golang/concurrent-safe-local-maphttps://fishfinal.com/linux/syslog/syslog-basics-protocol-rsyslog
问题出在哪里?
| 问题 | 说明 |
|---|---|
| 语义模糊 | 像技术文档库,而非个人博客。Google 难以区分“原创思考”和“技术笔记” |
| 身份弱化 | 没有独立的 /about、/archive 页面,博客的“人格化”属性不强 |
| 扩展性差 | 未来想写非技术类文章,放哪儿都不合适 |
3.2 目标结构
我决定将所有文章统一迁移到 /posts/ 目录下:
docs/
├── index.md # 博客首页
├── about.md # 关于我(新增)
├── archive.md # 文章归档(新增)
├── posts/ # 所有技术文章
│ ├── golang/
│ │ └── concurrent-safe-local-map.md
│ ├── linux/
│ │ └── syslog/
│ │ └── syslog-basics-protocol-rsyslog.md
│ └── ...(其他文章)
└── public/ # 静态资源新的 URL 结构:
https://fishfinal.com/posts/golang/concurrent-safe-local-maphttps://fishfinal.com/abouthttps://fishfinal.com/archive
3.3 迁移操作
第一步:移动文件
bash
# 创建新目录
mkdir docs/posts
# 移动所有技术文章目录到 posts 下
mv docs/golang docs/posts/
mv docs/linux docs/posts/
mv docs/kubernetes docs/posts/
# ... 其他目录同理第二步:创建 about.md 和 archive.md
在 docs/ 根目录下创建这两个文件,写入基础内容。
💡 注意
由于某些原因,在撰写该博文时,该博客并未创建 about.md 和 archive.md 进行 “关于” 和 “归档” 功能的实现!后续会陆续实现,谢谢!
第三步:更新 VitePress 侧边栏配置
修改 docs/.vitepress/config.ts 中的 themeConfig.sidebar,将所有链接从 /golang/xxx 改为 /posts/golang/xxx:
typescript
// 修改前
export default {
'/': [
{ text: 'Golang 项目部署', link: '/golang/deploy-production-fhs-standard' },
]
}
// 修改后
export default {
'/': [
{ text: 'Golang 项目部署', link: '/posts/golang/deploy-production-fhs-standard' },
]
}第四步:更新导航栏
typescript
nav: [
{ text: '首页', link: '/' },
{ text: '关于', link: '/about' },
{ text: '归档', link: '/archive' },
]
4. 平滑过渡:配置 301 重定向
4.1 为什么要做 301 重定向?
Google 可能已经收录了旧链接(/golang/xxx)。如果直接删除,用户和搜索引擎会看到 404,已有的微弱权重也会丢失。
我们需要配置 301 永久重定向,将旧链接指向新链接。
4.2 Nginx 重定向配置
nginx
# 301 重定向旧文章URL到新结构
location ~ ^/(?!posts|public|index|about|archive).*\.html$ {
rewrite ^/((?:[^/]+/)*[^/]+)\.html$ /posts/$1.html permanent;
}完整的 Nginx 配置:
nginx
server {
listen 80;
server_name fishfinal.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name fishfinal.com;
ssl_certificate /etc/nginx/ssl/fishfinal.com.pem;
ssl_certificate_key /etc/nginx/ssl/fishfinal.com.key;
# ... SSL 其他配置 ...
location / {
root /var/www/fishfinal-vitepress;
index index.html;
try_files $uri $uri/ @router;
}
location @router {
rewrite ^.*$ /index.html last;
}
# 301 重定向旧文章URL到新结构
location ~ ^/(?!posts|public|index|about|archive).*\.html$ {
rewrite ^/((?:[^/]+/)*[^/]+)\.html$ /posts/$1.html permanent;
}
}💡 注意
配置完成后,执行 sudo nginx -t && sudo systemctl reload nginx 使配置生效。
4.3 验证重定向
使用 curl 命令测试:
bash
curl -I https://fishfinal.com/linux/syslog/syslog-basics-protocol-rsyslog.html预期输出:
HTTP/2 301
date: Sat, 06 Jun 2026 10:36:48 GMT
content-type: text/html
location: https://fishfinal.com/posts/linux/syslog/syslog-basics-protocol-rsyslog.html
server: cloudflare
nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
cf-cache-status: DYNAMIC
report-to: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=6dzKcaQVMf1ouKIb%2BZIOKN5AVowg42J4z8uLJRYho4xh9cLD1N%2FWdpgmlJN516gMQPAhvjkWwuTHCMwT9aCP0H6EL3FzYzWKoeEqb%2F8fxOebXlnncYdlDkSER%2FOAnJIF"}]}
cf-ray: a076c72fedc93a69-LAX
alt-svc: h3=":443"; ma=86400
5. 收尾工作:通知 Google 并验证效果
5.1 提交新的站点地图
在 GSC 中,进入 “站点地图” → 输入 sitemap.xml → 点击 “提交”。

5.2 手动请求索引核心页面
在 GSC 的 “网址检查” 工具中,逐个输入以下 URL 并点击 “请求编入索引”:
https://fishfinal.com/(首页)https://fishfinal.com/abouthttps://fishfinal.com/archive- 最重要的 5-10 篇新文章
截图位置 11:GSC 网址检查-请求索引截图(待补充)






5.3 监控效果
接下来 2-4 周,重点关注 GSC “效果” 报告中的:
- 总曝光次数:是否开始增长
- 总点击次数:是否从接近 0 开始上升
- 已索引页面数量:是否从 13 开始增加
💡 注意
重构后效果报告数据截图,待补充,可等 2 周后再更新,谢谢
6. 总结与反思
6.1 关键经验
| 问题 | 解决方案 |
|---|---|
| Cloudflare 默认屏蔽 AI 爬虫 | 检查 Control AI crawlers,关闭 Block AI training bots,或直接 Disable robots.txt configuration |
| 目录结构语义不清 | 统一迁移到 /posts/,新增 /about、/archive |
| 旧链接失效 | Nginx 301 重定向 |
| Google 不收录新页面 | GSC 手动提交站点地图 + 手动请求索引 |
6.2 技术的本质
这次经历让我深刻理解了一个道理:
SEO 技术配置只是入场券,最终决定网站流量的,是内容的独特性和价值。
我的博客目前只有 13 篇被索引,核心原因不是技术问题,而是:
- 网站权威性太低(新站、无外链)
- 内容同质化严重(“Golang 部署”、“Kubernetes 指南”这类主题竞争太激烈)
- 缺乏独特的、解决具体问题的深度文章
6.3 下一步计划
- 持续输出:写真正能解决具体问题的文章(例如“Golang 中 json.Unmarshal 遇到 unexpected EOF 的排查指南”)
- 内部链接优化:在文章之间建立更密集的链接关系
- 获取外链:在技术社区分享高质量文章
6.4 写给其他技术博主
如果你也遇到了类似问题,请检查这三点:
- Cloudflare 的“Block AI training bots”关闭了吗?
- 你的
robots.txt允许Google-Extended吗? - 你的博客目录结构清晰吗?(统一用
/posts/是个好习惯)
做好这三件事,你就已经打败了 80% 的技术博客。
