在蜘蛛池的入口頁体系里,sitemap 常被当成一張“提交就有人来”的通行證。實际用下来會發現,它更像一份可選的導航清單:爬虫讀不讀、讀了之後走不走,最终還是由入口頁本身的狀態决定。把它的位置摆正,能省掉不少無效動作。
sitemap 能解决什么,不能解决什么
它最直接的價值是缩短 URL 的發現路径。当一個蜘蛛池里入口頁數量多、层級深、彼此連結稀疏时,光靠爬虫顺着鏈子一格格往下走,很多頁面可能長期進不了队列。sitemap 相当于把這些 URL 集中列出来,给爬虫一份現成的清單。
但它不解决抓取预算的分配,也不决定是否收錄。爬虫讀到一條 URL 之後,仍然要综合這個域名過去的响應质量、頁面内容、連結關系来判断值不值得爬。把 sitemap 当成“提交即抓取”的開關,通常會失望。
索引型 sitemap 與單文件的取舍
入口頁數量不多时,一個文件就够了。到了几百上千條,更稳妥的做法是用索引文件指向多個子 sitemap,按批次或按主题拆分。
- 拆分之後,每次新增只改對應子文件,不必整体重寫
- 單文件控制在几萬條 URL、未压缩 50MB 以内,是通行做法
- 某個批次整体失效时,可以直接撤掉整個子文件,而不是逐條删
批次划分尽量和入口頁的實际更新节奏對齐。如果一批入口頁是同一時間上线、同一時間退役,放在同一個子文件里维護成本最低。
哪些 URL 该寫進去
判断标准可以简化成一句话:爬虫点進来之後,能看到一個正常的、有内容的頁面吗。
- 返回 200、内容可讀的入口頁,可以放
- 返回 404、410 的,及时移除
- 中間隔着多次跳轉才能到终点的,先理顺鏈路再寫
- 參數组合成百上千的頁面,只保留有代表性的那几條
- 需要登入、需要交互才出現内容的,放進去意义不大
lastmod 字段也一样。全部标成同一秒,或者每次抓取都刷新,會让這個字段失去參考價值。按實际改動時間填寫,長期看更划算。
几個常见的做法偏差
第一個是把所有入口頁不分狀態一股脑塞進一個文件。短期看省事,長期會出現大量失效 URL,爬虫對這份清單的信任度會下降。
第二個是只用 sitemap,不做站内連結。清單能帮爬虫發現 URL,但頁面之間的連結關系才是它判断權重和重要性的主要依據。两者是互补,不是替代。
第三個是提交完就不管了。入口頁會失效、會改地址、會調整结构,一份半年没動過的清單,里面能用的比例通常已经不高。
把 sitemap 当成一份需要定期维護的资产,而不是一次性的提交動作,心態上會更接近它實际的作用。
落地时的几條建议
- 先确保入口頁本身可訪問、内容完整,再考虑要不要挂 sitemap
- 在 robots.txt 里声明位置,减少爬虫找它的成本
- 按批次拆分,控制單文件規模,方便單獨下线和替換
- lastmod 如實填寫,不做批量伪造
- 定期比對清單與實际入口頁狀態,清掉失效項
- 和入口頁之間的内鏈配合使用,不要指望清單單獨扛下發現任務
做完這些,sitemap 大致能稳定發挥它该有的那部分作用。剩下的,還是要回到入口頁的响應速度、内容厚度和連結结构上去。