做蜘蛛池的人经常把 sitemap 当成一個“提交完就等结果”的按钮,也有人觉得入口頁之間已经互鏈了,再挂個 sitemap 纯属多余。這两種想法都偏了。sitemap 和蜘蛛池入口頁其實解决的是两個不同环节的問题:sitemap 负责把 URL 清單递到爬虫面前,入口頁负责让爬虫愿意顺着連結繼續走。把它們分開看,思路會清楚很多。
sitemap 解决的是“發現”,不是“抓取”
sitemap 的作用是告诉爬虫“這里有這些地址”,它不负责说服爬虫来讀、也不保證抓取频次。爬虫拿到清單之後,仍然要按自己的調度逻辑决定什么时候来、来几次。很多人把 sitemap 当成收錄保證,提交之後没動静就認為工具失效,其實是把两個环节混在一起了。真正影响抓取意愿的,是頁面的响應速度、連結關系、内容是否有差异,這些恰恰是蜘蛛池入口頁要做的事。
入口頁和 sitemap 各自擅長什么
- 入口頁:靠連結關系传递。爬虫是顺着連結走過来的,所以入口頁之間的互鏈结构會直接影响爬取路径和停留深度,适合承载那些希望被反复訪問、希望把權重往内頁递的頁面。
- sitemap:批量、结构化。它擅長覆盖連結结构里不好安放、或者层級較深、入口頁一时照不到的頁面,属于“补漏”的角色。
- 两者重叠不冲突,但不要把其中一個当成另一個的替代品。只铺入口頁不寫 sitemap,可能會有頁面長期没人發現;只寫 sitemap 不做入口頁,清單递上去了也没人愿意往下走。
sitemap 里應该放什么 URL
這一步比寫 sitemap 文件本身更重要。放進清單的地址,最好满足下面几條:
- 直接返回 200,不经過跳轉鏈。把一個 301 的地址寫進 sitemap,爬虫跑過去還要再跳一次,等于白費一次抓取。
- 頁面本身是希望被看到的,不是參數组合出来的重复頁。带一堆無意义參數的地址塞多了,清單的质量會被拉低。
- URL 干净、稳定,不要频繁改路径。清單里的地址換来換去,爬虫會重新判断,之前积累的判断也會归零。
- 同一内容只出現一次。入口頁和 sitemap 里重复列同一個地址没意义,sitemap 内部自己重复更没必要。
分片與索引文件怎么组织
單個 sitemap 文件有條數上限,量大的站点要用 sitemap index 来分片。分片方式建议按目錄或者按時間切,比如按栏目分、按批次分,而不是随机切割。這样做的好處是,某一片出問题时你能立刻定位到是哪批 URL 受影响,回滚或者重建都方便。分片文件本身也要能正常訪問,否則索引文件指過去是空的。
lastmod 別乱寫
常见做法是把全站所有頁面的 lastmod 统一改成当天,图個“看起来新鲜”。但爬虫對這個字段是有判断的:如果每次来都發現所有頁面都刚更新過,這個信号很快就失去參考價值。真實一点的做法是,頁面确實改了才更新對應條目的 lastmod,没改的保持原值。哪怕更新频率低,也比全員刷時間要可信。
几個容易踩的誤区
- 把 sitemap 当收錄開關:提交了不等于會被抓,更不等于會被收錄。
- 清單里混入大量低價值地址:分頁、篩選、排序參數全塞進去,反而稀释了真正重要的 URL。
- 提交完就再也不管:入口頁在增删,sitemap 却几個月不動,清單和站内實际情况會對不上。
- sitemap 里放已经失效的地址:删掉的頁面要及时從清單里拿掉,否則每次抓取都是空跑。
怎么观察效果
不需要靠感觉判断。看日誌里 sitemap 文件本身被訪問的频次,看清單里的地址有多少真正被訪問過,再看入口頁的訪問情况有没有跟着變化。如果 sitemap 被频繁讀取,但清單里的地址几乎没人訪問,說明問题不在清單本身,而在于頁面质量或連結關系;反過来,如果 sitemap 极少被讀取,那就先检查文件是否可訪問、是否在 robots.txt 里声明、路径有没有寫错。
sitemap 是路牌,入口頁是路。路牌指得再清楚,路本身走不通也没用;路修得再好,没有路牌指路,一部分地址可能長期没人经過。两者配合着做,比單獨押注任何一邊都稳。
最後提醒一句:無论 sitemap 還是蜘蛛池入口頁,做的都是让爬虫更容易發現和抓取,至于抓取之後怎么判断,那是另一回事。把该铺的路铺好、该更新的清單更新到位,剩下的交给時間和持續观察就够了。