在蜘蛛池里,sitemap 经常被当成一個“提交了就完事”的動作。實际上它更像一份寫给爬虫的清單:告诉對方這個域名下有哪些 URL、大概什么时候更新過。它不能替代入口頁,也不能保證抓取和收錄,但如果用對了,可以多给蜘蛛一條發現路径。
sitemap 在蜘蛛池里解决什么問题
蜘蛛池的常见鏈路是:入口頁被蜘蛛發現,入口頁上的連結再把蜘蛛带到目标頁。sitemap 的作用是补充這條鏈路,尤其适合两種情况:目标頁數量多、层級深,或者入口頁上的連結位置不明顯。它不會让蜘蛛凭空知道一個從未被引用過的域名,域名和入口頁本身仍然要先被訪問到。
入口頁和 sitemap 的分工
- 入口頁:承担被發現的任務,通常需要有可訪問的 HTML、稳定的 URL 和基本的站内連結结构。
- sitemap:承担列清單的任務,把希望被發現的 URL 集中列出来,减少蜘蛛靠連結一层层爬的成本。
- 两者在同一域名下时,蜘蛛訪問入口頁後,有机會顺带請求 /sitemap.xml;如果入口頁本身打不開,只靠 sitemap 效果會打折。
怎么寫、放在哪里
- 放在站点根目錄,路径用 /sitemap.xml,返回 200,Content-Type 一般是 application/xml 或 text/xml。
- 單個文件建议不超過 5 萬條 URL、未压缩不超過 50MB;超過就拆成多個 sitemap,再用 sitemap index 匯總。
- URL 用绝對地址,和頁面實际地址一致,不要寫重定向後的地址。
- lastmod 只寫真實修改時間。每次生成都刷成目前時間,參考價值會越来越低。
- 不是每個入口頁都必须配 sitemap。入口頁數量多时,按域名或按批次做一個匯總 sitemap 就够了。
提交與不提交的實际差別
不提交 sitemap,蜘蛛仍然可能通過入口頁連結發現頁面,只是發現速度取决于抓取频率和連結深度。提交到站長平台,相当于多了一個發現通道,前提是域名已经驗證、sitemap 能正常訪問、里面的 URL 返回 200。提交後不要每天反复提交或 ping,按平台提示或内容有實质更新时再處理即可。
几個容易踩的坑
- 把 sitemap 当成收錄開關。提交只影响發現,不决定是否收錄。
- sitemap 里塞了大量 404、410 或跳轉地址。蜘蛛抓到這些會浪費抓取配額,也會降低對文件的信任。
- 入口頁數量很多,却只提交一個巨型 sitemap,里面混着不同批次、不同狀態的 URL,後期很难排查。
- 只寫 sitemap,不维護入口頁。蜘蛛拿到清單後仍要請求頁面,頁面打不開就白跑。
日常检查可以看這几項
- 随机抽几個 sitemap 里的 URL,確認返回 200 且内容不是空壳。
- 看服務器日誌里有没有對 /sitemap.xml 的請求,以及請求後是否繼續抓取清單里的頁面。
- 检查 sitemap 文件大小和條目數,超過限制就拆分。
- 確認 sitemap 没有被 WAF、CDN 或 robots 誤拦。robots 里如果屏蔽了 sitemap 路径,蜘蛛就取不到。
sitemap 是路标,不是通行證。它能让蜘蛛少走弯路,但走不走、走多深,仍然取决于入口頁是否可訪問、内容是否值得抓取,以及服務器是否扛得住。
把 sitemap 放進蜘蛛池的日常维護里,重点不是“提交了多少次”,而是清單是否干净、地址是否有效、和入口頁的連結结构是否對得上。先把這几件事做稳,比反复研究提交频率更有意义。