蜘蛛池知识

蜘蛛池里的 robots.txt 與 sitemap:入口頁之後怎么繼續给蜘蛛指路

入口頁负责让蜘蛛進门,robots.txt 和 sitemap 负责告诉它接下来往哪走。本文讲清楚入口站里這两份文件该怎么寫、邊界在哪里、日常怎么维護,避免蜘蛛讀完入口頁就無路可走,也避免自己把路提前堵死。

蜘蛛池知识

蜘蛛池里的 robots.txt 與 sitemap:入口頁之後怎么繼續给蜘蛛指路

入口頁的职责是让蜘蛛找到你、愿意讀一讀。但蜘蛛讀完入口頁之後往哪走,取决于你有没有给它留路。robots.txt 和 sitemap 就是最基础的两块路牌:一個管“能不能走”,一個管“该往哪走”。這两样東西寫错,入口頁做得再干净,抓取也可能停在门口。

robots.txt:先想清楚要不要挡

蜘蛛池入口站最常见的错誤,是把主站或別的模板直接複製過来。不少模板里带着 Disallow: / 或者整段屏蔽目錄的規則,蜘蛛進来一看扭头就走,日誌里只剩下 robots.txt 一條請求,入口頁一次都没被讀過。

入口站本身的目的就是被爬,所以 robots.txt 里通常應该放行主要路径,只精确屏蔽确實没有抓取價值的部分:後台入口、日誌目錄、临时上传目錄、統計脚本路径。屏蔽用具体路径,不要用 /* 這類通配一刀切。

還有一点容易忽略:Disallow 不等于 noindex。被 robots.txt 挡住的 URL,蜘蛛连内容都讀不到,自然不會處理頁面上的 noindex 标簽。如果某個頁面确實不想被展示,正确做法是让它可抓取、返回 200、再在頁面上给 noindex,而不是在 robots.txt 里一挡了事。

sitemap:入口頁之後最省事的指路牌

sitemap 的作用是把入口頁之外、你希望被繼續抓取的 URL 直接交到蜘蛛手上,省掉它靠連結慢慢爬的功夫。在以“被發現”為核心目标的场景里,sitemap 往往比内鏈更直接。

几個寫法要点:

  • 只放 200 狀態、可索引、内容不重复的 URL。跳轉頁、參數组合頁、搜尋结果頁统统不要塞。
  • 每個入口站最好有自己的 sitemap,並在该站 robots.txt 里用 Sitemap: 一行声明完整地址。
  • 單文件建议不超過 5 萬條 URL、50MB 未压缩体积,超了就拆成多個文件,再用 sitemap index 做索引。
  • URL 有增删後要重寫文件並更新 lastmod;長期不维護的 sitemap 會把已经 404 的地址一直喂给蜘蛛。
  • sitemap 里的連結只是提示,不代表一定被發現,更不代表一定被收錄。

從入口頁到目标頁,路径怎么铺

sitemap 解决的是“有没有被發現”,連結结构解决的是“能不能顺着走到”。比較稳的做法是入口頁只做一层聚合,把蜘蛛引到分類頁或列表頁,再由列表頁指向具体目标頁,层級控制在三层以内,蜘蛛不容易在中間迷路。

連結要用 a href 這種可抓取形式,而不是 onclick 或 JS 路由生成。锚文本尽量有区分度,別整頁都是“点击這里”“查看更多”這類没有信息量的词。

容易踩的几個坑

  1. robots.txt 寫 Disallow: /,然後纳闷蜘蛛為什么不抓頁面。
  2. sitemap 里混進大量 301、404 地址,蜘蛛抓几次空,就會降低對這份文件的信任。
  3. 提交完 sitemap 就再也不更新,文件里的 lastmod 還是几個月前的日期。
  4. 一個站拆了几十個 sitemap 文件,却没有總索引,蜘蛛只能靠猜。
  5. 入口頁導航是 JS 生成的,源碼里根本找不到連結。

一些實际使用建议

  • 先確認 robots.txt 放行正常,再去折腾 sitemap,顺序反了容易白忙。
  • 把 sitemap 当成一份需要日常维護的清單,而不是一次性提交完事的文件。
  • 定期比對蜘蛛日誌里的實际訪問 URL 和 sitemap 清單,差得太遠,說明路牌和真實路径已经脱节。
  • 入口站數量增加时,sitemap 的维護成本也會跟着涨,扩張之前先想清楚谁来维護。
蜘蛛不會因為你在 robots.txt 里寫了 Sitemap 就一定来抓,也不會因為文件里列了 URL 就一定收錄。robots.txt 和 sitemap 的價值在于把“可以抓”和“该抓哪”说清楚,剩下的仍然取决于内容本身和蜘蛛自己的調度。