蜘蛛池知识

蜘蛛池入口頁的 robots.txt 與 meta robots:放行、屏蔽與常见冲突

搭入口頁时,robots.txt 和 meta robots 常被從舊模板直接複製,结果一邊在引蜘蛛、一邊用規則把抓取挡在门外。本文讲清這两類規則各自管什么、User-agent 分组容易寫错的地方、Allow 與 Disallow 的取舍、X-Robots-Tag 在 CDN 层可能遇到的坑,並给出一套從規則到日誌的排查顺序。

蜘蛛池知识

蜘蛛池入口頁的 robots.txt 與 meta robots:放行、屏蔽與常见冲突

為什么入口頁的爬虫規則容易被忽略

搭入口頁的时候,大部分精力都花在域名、IP、跳轉鏈和内容填充上,robots.txt 和 meta robots 往往是從舊模板里直接複製的。于是就會出現一邊在想办法引蜘蛛、一邊用一行 Disallow 把整站挡住的尴尬局面。這類問题排查起来很不直观:日誌里看不到蜘蛛,第一反應通常是怀疑 IP 被封或者 DNS 有問题,而真正的原因可能只是一條寫错的規則。

入口頁的 robots.txt 要處理什么

對大多數入口頁来说,robots.txt 只需要承担三件事:告诉蜘蛛哪些目錄可以抓、给出 sitemap 的位置、避免誤伤無關的抓取路径。它不是一個需要精心设計的東西,放行是預設動作。入口頁本身没有私密資料,也没有需要保護的接口,通常不需要做目錄級屏蔽。真正值得屏蔽的是後台路径、測試目錄、带參數的篩選頁這類不产生價值的 URL。

User-agent 分组最容易寫错

一個高频错誤是把通配分组和具体蜘蛛分组混着寫。比如寫了一條 User-agent: Baiduspider 加 Disallow: /,本意可能只是临时測試,上线时忘了删;同时在 User-agent: * 分组里寫着 Allow: /。两條規則互相打架,實际效果取决于搜尋引擎怎么解析優先級。規則越复杂,冲突概率越高。如果只是想让蜘蛛正常抓取,最省事的寫法就是保留必要的 Allow 和一條 Sitemap,其余交给預設行為。

不要把 Allow 和 Disallow 当成優先級游戏

不同搜尋引擎對 Allow 與 Disallow 冲突的處理细节並不完全一致,通常路径越長、越具体的規則優先級越高,但這一点不能想当然。與其靠寫复杂規則去押注命中结果,不如在寫 Disallow 时就把想放行的目錄排除在外,規則越少越不容易出错。

meta robots 與 X-Robots-Tag 怎么選

robots.txt 管的是能不能来抓,meta robots 管的是抓了之後能不能收錄、能不能跟連結,两者层次不同,混用是最常见的誤区。

  • 入口頁需要被抓取,頁面上不要出現 noindex、nofollow 這類标簽;
  • 如果入口頁由程序统一生成模板,要检查模板里有没有沿用舊站的 meta robots;
  • X-Robots-Tag 寫在响應头里,CDN 或反向代理层可能缓存或覆盖,排查时要看實际响應头,而不是只看源站配置。

還有一種情况是頁面代碼本身没問题,但线上返回的 HTML 里带着缓存下来的舊 meta 标簽,改了源站却没生效。遇到代碼明明改了、蜘蛛還是不抓的情况,值得拉一次线上實际返回的内容做比對。

排查蜘蛛不来的先後顺序

  1. 確認 robots.txt 能被正常訪問,返回 200,且返回的是纯文本而不是 HTML 頁面;
  2. 检查是否有 Disallow 通配符挡住了入口頁所在目錄;
  3. 看頁面 HTML 中是否存在 noindex;
  4. 看响應头里是否带有 X-Robots-Tag;
  5. 以上都没問题,再去查 DNS、IP、防火墙和訪問日誌。

把這几步放在前面,能省掉大量在服務器层面的無效排查。不少“入口頁没什么反應”的反馈,最後定位到的就是第一、第二步。

几條實操建议

  • 入口頁的 robots.txt 尽量简短,只在确實需要时寫 Disallow;
  • 批量上线时统一使用同一份模板,避免個別站点漏改;
  • 改動規則後,隔一段時間观察訪問日誌里的蜘蛛請求路径有没有變化;
  • 不要用 robots.txt 去做内容保護,它只是约定,不是訪問控制。
robots.txt 能影响蜘蛛来不来,但决定不了蜘蛛抓完之後做什么。把規則寫對只是把路打開,後面的内容、連結结构和更新节奏才是長期要盯的部分。

規則层面的事情本身不复杂,难的是统一和坚持。入口頁數量一多,模板、缓存、副本之間很容易出現規則不一致,定期抽查比事後返工划算得多。