← 返回专栏
· 1 分钟阅读

Ahrefs 和 Backlinko 都没有 llms.txt:给 SEO 行业做一次 AI 爬虫审计

人人都在卖 GEO 建议,但几乎没人审计那个决定 AI 引擎能不能读到内容的守门层。用新写的零依赖 CLI 跑了三家知名 SEO 站和自己的项目:ahrefs.com 和 backlinko.com 的 llms.txt 都是 404,子路径封禁会被粗糙工具误读成全站封禁,robots.txt 的放行也挡不住 Cloudflare 边缘的爬虫开关。每个结论都附真实 CLI 输出。

TL;DR

TL;DR — zens-ink v1.4.8 新增 ai_crawler_audit:读取 robots.txt,对 17 个 AI 爬虫(训练类 vs AI 搜索类,按厂商分组)逐个判定可达性,把全站封禁和子路径封禁分开,读 Content Signals,验证 llms.txt / llms-full.txt 发现层,输出 0-100 的 AI 可读性评分。首批真实数据:ahrefs.com 88 分且完全没有 llms.txt,backlinko.com 同样 404,searchenginejournal.com 96 分、515 条链接的 llms.txt。卖 GEO 课件的人,自己漏掉了最便宜的那一层。一条命令,免 API key,零依赖。

ahrefs.com 的 /llms.txt 返回 404。Backlinko 也是。我是给新审计工具找测试目标时查的,SEO 圈最有名的两家,恰好都缺了最便宜的 AI 发现层。

Search Engine Journal 有,515 条链接,225 KB。所以这不是行业性的做不到,是遗漏,而且一条命令就能量出来。

工具查什么

zens-ink v1.4.8 加了 ai_crawler_audit。做它是因为「我的站准备好了吗」这个问题底下有一层可以机械检查的东西,大部分 GEO 内容直接跳过了这层:

pip install --upgrade zens-ink
zens-ink ai_crawler_audit https://ahrefs.com

它拉取 robots.txt,按厂商和用途给 17 个 AI 爬虫分类判定,读 Content Signals,探测 /llms.txt/llms-full.txt,打印评分和人话建议。零依赖,免 API key。

粗糙检查会搞错的部分

自己在自己站上试用时撞到一个 bug:第一版把 Disallow: /api/ 读成了「GPTBot 被封」。不是。Disallow 只覆盖它写明的路径,Disallow: /admin 挡住的是 /admin/ 下的内容,站点其余部分完全可抓;只有 Disallow: / 是全站封禁。正式版对每个爬虫区分四种状态——blockedpartialallowedunlisted——因为混为一谈会把每一份真实 robots.txt 都变成警报。

这个区分就是「你的 CMS 挡了 AI 爬虫,赶紧修」和「你的 CMS 对爬虫隐藏 /admin,这是对的」之间的差别。

互不知晓的两层

审计还暴露了第二件事:robots.txt 的放行不是承诺。我自己有个站,robots.txt 对所有 AI 爬虫放行,但前面挂着 Cloudflare,它的 AI Scrapers 开关在边缘就把大部分爬虫 403 了。两种状态都合法;以为自己处于第一种而实际跑着第二种,是站点在几个月里丢掉 AI 引用却不自知的典型方式。

审计对这种情况会打一条专门的备注——robots 全放行时,去单独确认边缘层的配置。

真实运行

$ zens-ink ai_crawler_audit https://ahrefs.com
robots.txt: HTTP 200 (908 bytes) · sitemap declared: no · signals: none
  GPTBot              partial *  OpenAI     training
  OAI-SearchBot       partial *  OpenAI     AI search grounding
  PerplexityBot       partial *  Perplexity AI search answers
  llms.txt: HTTP 404 · 0 bytes · 0 links
AI-readiness score: 88/100
  - No llms.txt — AI engines discover content depth from it first.

$ zens-ink ai_crawler_audit https://searchenginejournal.com
robots.txt: HTTP 200 (2020 bytes) · sitemap declared: yes · signals: none
  llms.txt: HTTP 200 · 225584 bytes · 515 links
AI-readiness score: 96/100

88 和 96 的差距几乎全部来自 llms.txt 这一层。Ahrefs 的 robots.txt 没毛病,只有子路径规则,每个 AI 爬虫都能碰到内容。缺的那个目录页就是全部差别。

拿它做什么

今天就对自己的站跑一遍,再跑你在意的三个竞品。如果对方设了 signals、llms.txt 在线、搜索爬虫放行,而你这边三个都是 404,这是你这个季度最容易补的缺口。用 zens-ink llms_gen --sitemap https://yoursite/sitemap.xml 生成缺的那层,再跑一遍审计确认。

说句实话:llms.txt 加放行的 robots.txt 不会让 AI 引擎引用你,它们只是让你够格。88 分的那些站也够格,它们只是把发现层做得比必要的更难。而对一个卖这个建议的行业来说,这本身就是发现。

FAQ

robots.txt 里的 Disallow: /admin 会挡住 AI 爬虫抓全站吗?

不会。Disallow 只作用于它写明的路径。Disallow: /admin 只挡 /admin/ 下的内容,站点其余部分照常可抓;只有 Disallow: / 才是全站封禁。很多粗糙的审计工具把任何一行 Disallow 都当成全站封禁,制造假警报——ai_crawler_audit 对每个爬虫区分 blocked(全站)、partial(仅子路径)、allowed、unlisted 四种状态。

robots.txt 允许了 GPTBot,OpenAI 就一定能抓到我的站吗?

不一定。robots.txt 只是两层里的一层。边缘爬虫管理(比如 Cloudflare 的 AI Scrapers and Crawlers 开关)可以在请求到达源站之前直接返回 403,跟 robots.txt 写什么无关。想让 AI 搜索引用你,两层都要查:robots 策略和边缘防火墙。

llms.txt 是什么,需要配 llms-full.txt 吗?

llms.txt 是放在站点根目录的 markdown 目录页,告诉 AI 引擎你的内容是什么、重要页面在哪。两层结构效果最好:精选版 llms.txt 放核心页面(几十条链接),llms-full.txt 放全量目录并按板块分组。zens-ink 用 zens-ink llms_gen 从静态构建目录或线上 sitemap 生成这两层,部署后用 zens-ink ai_crawler_audit 验证。

想给自己的站点做同样的分析?

ZensInk Pro 把这个流程自动化了。一条命令,从种子词到内容计划。

查看 Pro →