Skip to content

博客 SEO 技术重构:从每月 6 次点击到 Google 稳定收录

1. 问题暴露:上线快一年,为什么只有几十次点击?

2025 年 8 月 30 日,我的技术博客正式上线。作为一个 Golang 开发者的个人技术博客,我认真写着每一篇文章,涵盖 Linux、Kubernetes、Golang 源码分析、CI/CD 实践等方向。

快一年后,我去查看 Google Search Console(以下简称 GSC)的数据,结果令人困惑:

时间周期总点击次数总曝光次数平均点击率平均排名
过去 28 天64812.5%13.9
过去 6 个月118981.2%26.3
上线至今(12个月)280%30.9

GSC 28天效果报告GSC 28天效果报告

GSC 6个月效果报告GSC 6个月效果报告

GSC 12个月效果报告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 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” 的按钮。

Disable robots.txt configuration 按钮截图

Disable robots.txt configuration 按钮截图

点击后,Cloudflare 不再托管 robots.txt,而是直接透传我服务器上的静态文件。

再次访问 https://fishfinal.com/robots.txt,内容终于变成了我想要的简洁版本:

text
User-agent: *
Allow: /
Sitemap: https://fishfinal.com/sitemap.xml

修改后正确的 robots.txt 截图

经验总结: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-map
  • https://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-map
  • https://fishfinal.com/about
  • https://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

终端 curl -I 命令和输出截图

5. 收尾工作:通知 Google 并验证效果

5.1 提交新的站点地图

在 GSC 中,进入 “站点地图” → 输入 sitemap.xml → 点击 “提交”

5.2 手动请求索引核心页面

在 GSC 的 “网址检查” 工具中,逐个输入以下 URL 并点击 “请求编入索引”

  • https://fishfinal.com/(首页)
  • https://fishfinal.com/about
  • https://fishfinal.com/archive
  • 最重要的 5-10 篇新文章

截图位置 11:GSC 网址检查-请求索引截图(待补充)

GSC 网址检查-请求索引截图-1GSC 网址检查-请求索引截图-2GSC 网址检查-请求索引截图-3GSC 网址检查-请求索引截图-4GSC 网址检查-请求索引截图-5GSC 网址检查-请求索引截图-6

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 下一步计划

  1. 持续输出:写真正能解决具体问题的文章(例如“Golang 中 json.Unmarshal 遇到 unexpected EOF 的排查指南”)
  2. 内部链接优化:在文章之间建立更密集的链接关系
  3. 获取外链:在技术社区分享高质量文章

6.4 写给其他技术博主

如果你也遇到了类似问题,请检查这三点:

  1. Cloudflare 的“Block AI training bots”关闭了吗?
  2. 你的 robots.txt 允许 Google-Extended 吗?
  3. 你的博客目录结构清晰吗?(统一用 /posts/ 是个好习惯)

做好这三件事,你就已经打败了 80% 的技术博客。

附录:相关资源

最后更新2026/06/06 11:21
如果你觉得这篇文章有帮助,或者想聊聊技术、工作,欢迎通过下面方式联系我:
contact fishfinal