很多入口頁的問题不是内容不够,而是蜘蛛根本没被允许進来。robots.txt 和 meta robots 一個在站点层,一個在頁面层,作用范围不同,誤配後的表現也不一样。
robots.txt:站点层的通行規則
robots.txt 放在域名根目錄,只對目前域名生效。它本身不是强制标准,主流搜尋引擎會遵守,但不同爬虫對通配符、正則和 Crawl-delay 的支持並不一致。
- User-agent: * 與 Disallow: / 组合會把整站挡掉,這是入口頁最嚴重的誤配之一。
- Disallow 只寫目錄不寫斜杠,可能匹配到更多路径;寫 /tmp 會连带挡住 /tmp-abc 這類地址。
- Allow 與 Disallow 的優先級在不同爬虫里表現不同,重要目錄建议單獨放行並复驗。
- Crawl-delay 對配額紧張的小站不一定有用,部分爬虫會直接忽略。
- Sitemap 声明可以放在 robots.txt 里,但不要和 Disallow 規則冲突。
動態生成时的坑
有些程序按环境生成 robots.txt,測試环境返回 Disallow: /,上线後没有切換。還有的服務器把不存在的 robots.txt 返回 200 加一段空内容,爬虫可能把它当成有效規則,也可能因為解析失敗而停止深入。
meta robots:頁面层的開關
meta robots 寫在 head 里,只對目前頁面生效。常见取值包括 noindex、nofollow、noarchive、nosnippet。
- noindex 是入口頁最需要警惕的一項:頁面能被抓,但不會進入索引,批量套模板时很容易带進来。
- nofollow 會阻止蜘蛛跟随頁面連結,入口頁靠連結把蜘蛛導向目标頁,誤配後鏈路等于断掉。
- noarchive 只影响快照,不影响抓取和索引,通常不必動。
- 多個 meta robots 同时出現时,爬虫的合並策略不一致,最好只保留一條。
X-Robots-Tag 與响應头
有些站点通過 HTTP 响應头里的 X-Robots-Tag 控制索引,這個指令對 PDF、图片等非 HTML 资源同样有效。如果服務器配置里统一加了 noindex,頁面里的 meta 标簽寫得再對也没用。
常见誤配组合
- robots.txt 放行,但 meta robots 寫了 noindex:蜘蛛来抓,不建索引。
- robots.txt 屏蔽目錄,頁面里却期待被抓:蜘蛛可能连請求都不發。
- 屏蔽 CSS 與 JS:部分爬虫需要渲染才能理解頁面,屏蔽後拿到的内容不完整。
- 測試环境規則带到正式环境:整站被挡,或者只放行了少數路径。
- 多域名共用一份 robots.txt:A 域名的規則被套到 B 域名上。
上线前後怎么检查
用爬虫视角而不是浏览器视角看問题。
- 直接訪問 /robots.txt,確認返回 200、内容與预期一致,没有被缓存成舊版本。
- 用搜尋资源平台提供的 robots 測試工具驗證具体 URL 是否被允许。
- 查看頁面源代碼里的 meta robots,而不是只看渲染後的 DOM。
- 抓一次响應头,確認没有意外的 X-Robots-Tag。
- 上线後观察日誌中目标 URL 的抓取记錄,如果入口頁有訪問、目标頁没有,優先检查 nofollow 和連結是否可抓。
robots.txt 和 meta robots 只影响抓取與索引的意愿,不决定頁面质量。放行之後能不能被收錄,仍然要看内容與站点整体表現。
批量站点最容易在模板和服務器配置里埋下這两類指令。建议把 robots.txt 與 meta robots 纳入上线检查項,改動一次就复驗一次,避免一個小配置把整條蜘蛛鏈路挡在门外。