對蜘蛛池入口頁来说,sitemap 经常被当成一個“提交完就等收錄”的按钮。實际它更像一張地图,告诉蜘蛛哪里有 URL,但它不决定蜘蛛是否愿意抓、是否值得收錄。把這一点先摆正,後面的取舍會容易很多。
一、sitemap 在蜘蛛池里解决什么問题
入口頁數量多、更新频繁时,蜘蛛靠内鏈和外部連結慢慢發現 URL,效率並不稳定。sitemap 提供的是一條相對直接的發現通道,尤其适合新入口頁,或者内鏈层級較深、靠点击很难到達的頁面。
sitemap 只影响“發現”,不保證“抓取”和“收錄”。把它当辅助,不要当投放開關。
二、该放進 sitemap 的 URL
- 狀態正常、返回 200 的入口頁;
- 你希望被發現的少量目标頁;
- 内鏈层級較深、蜘蛛很难顺鏈走到的頁面。
如果入口頁本身設定了 canonical,sitemap 里放 canonical 指向的那個版本即可,不要放已被 canonical 掉的重复 URL,否則等于给蜘蛛两份互相打架的地址。
三、不建议放進去的類型
- 已驗證 404、410 或長期超时的 URL;
- robots.txt 里已经屏蔽的路径;
- 带 session id、排序參數、篩選參數的頁面;
- 大量同一模板、正文几乎相同的入口頁。
模板化嚴重的蜘蛛池入口頁,如果把成千上萬個几乎一样的 URL 全塞進 sitemap,容易让蜘蛛對整批 URL 的抓取價值打問号。可以先放一部分有代表性的入口頁,观察抓取反馈,再决定是否扩大范围。
四、XML、txt 還是 sitemap 索引
少量 URL 用 txt 最省事,一行一個完整地址,不需要 XML 头和轉义。需要寫 lastmod、或者數量較多时用 XML。文件數量多、單個文件接近上限时,用 sitemap 索引文件把多個子 sitemap 串起来。
常见做法是單文件控制在 5 萬條 URL、50MB 以内;具体以搜尋引擎文档為准,但没必要贴着上限堆。
lastmod 填真實的最後修改時間。如果每次生成 sitemap 都把 lastmod 刷成目前時間,蜘蛛几次對比後可能不再信任這個字段。
五、放置與声明
- XML 放根目錄,命名為 /sitemap.xml;
- 在 robots.txt 里用 Sitemap 指令声明完整地址;
- 確認返回 200,Content-Type 為 XML 或 text/plain,编碼 UTF-8;
- 抓取一次,看是否有重定向、超时、压缩错誤或 BOM 头。
如果 sitemap 地址本身還要 301 跳一次,蜘蛛可能仍會跟進,但不如直接给最终地址省事。
六、几個常见誤区
- 以為 sitemap 越大越好,结果里面大半是 404 或重复頁;
- sitemap 里放屏蔽 URL,與 robots 規則互相打架;
- 用 changefreq 和 priority 试图影响抓取频率;
- 只在文件里堆 URL,從不看日誌里蜘蛛實际抓了什么。
changefreq 和 priority 現在多數搜尋引擎已经弱化甚至忽略,不必在這两個字段上花太多時間。
七、什么情况下先撤掉 sitemap
如果你在日誌里看到 sitemap 中的 URL 大量返回 404、超时,或者蜘蛛每次来都只抓 sitemap 里的低质重复頁,而目标入口頁長期没動静,可以先缩小 sitemap 范围,甚至暂时撤下。减少無效 URL 的暴露,比繼續堆量更有價值。
八、小结
蜘蛛池入口頁的 sitemap 應该是一份“可信清單”,而不是 URL 仓库。放可訪問、有区分度、你希望被發現的地址;保持 lastmod 真實;定期用日誌驗證蜘蛛抓了什么。把它当 URL 發現的辅助通道,別指望它單獨解决收錄問题。