我的博客后台躺着三个"已失效"的Mastodon功能,互相看起来毫无关联。花了20分钟和Claude Code聊天后,发现它们死于同一个原因。
症状一:域名验证突然变红
Mastodon的域名验证机制很直接。你在个人资料填上博客链接,同时在博客页面放一个指向自己Mastodon账号的反向链接,服务器爬取确认后,URL旁就会出现绿色对勾。
这个验证我早年就配置好了,博客和GitHub都通过了。某天博客链接突然失效,GitHub却正常。我检查了半天HTML结构,没找到问题。
症状二:预览卡彻底消失
在Mastodon分享链接时,实例会爬取页面生成预览卡,读取OpenGraph标签的标题、描述和图片。
我的博客标签配置正确,分享出去却只剩光秃秃的URL。诡异的是,我用同样技术栈做的Newsletter分享时,预览卡正常显示。
症状三:作者归属从未生效
Mastodon 4.3版本新增了作者归属功能。页面加入这行meta标签后,他人分享链接时会显示"By @作者"徽章,粉丝可直接从预览页关注作者:
我从添加那天起就没见过它生效。
Cloudflare的"机器人格斗模式"是凶手
三个功能共享同一套机制:Mastodon服务器必须能爬取我的页面。既然Newsletter预览正常,问题不在我的博客代码。
Claude Code检查响应头后发现了真相。我的博客跑在Cloudflare后面,我开启了Bot Fight Mode——这项功能会拦截被判定为可疑的自动化流量。正规服务可以向Cloudflare注册域名白名单,Bluesky和Twitter都这么做了。
Mastodon被自己的去中心化架构坑了。每个Mastodon实例运行在独立域名下,我的实例是https://mastodon.top,其爬虫部署在Hetzner服务器上。Hetzner的IP段在Cloudflare的威胁数据库里评分极高——因为被机器人运营者大量使用。
Mastodon爬虫请求我的页面时,Cloudflare返回JavaScript挑战页而非HTML。Mastodon的http.rb客户端解不了JS挑战,拿到空响应,缓存失败结果,然后放弃。
修复方案:关掉它
进入Cloudflare后台Security > Bots,关闭Bot Fight Mode。这个开关对公开静态博客几乎没保护作用,却专门误杀合法爬虫。关掉后,三个Mastodon功能瞬间全部恢复。
这是Mastodon和Cloudflare社区里已知的老问题。去中心化架构在抗审查上的优势,碰上中心化安全服务的黑名单机制,成了技术债。
热门跟贴