先看搜尋蜘蛛是怎么走連結的
搜尋蜘蛛的工作方式比很多人想象得简單:它從一個已知 URL 出發,下载頁面,解析出里面的連結,把没见過的 URL 放進待抓取队列,然後按一定優先級依次訪問。每訪問一個 URL,就把它标记為已抓取,後續再遇到同一個 URL 时,通常不會在短時間内重复抓取。
這個机制决定了:环状連結本身不會让蜘蛛卡死。A 頁鏈到 B,B 頁鏈回 A,蜘蛛第二次看到 A 时,發現它已经在已抓取集合里,就不會再排一次队。所以“绕圈绕到停不下来”這種情况,在静態連結上基本不會發生。
环不會死循环,但會挤占抓取预算
真正需要担心的是另一件事:抓取预算。每個站点在單位時間内能被蜘蛛抓取的頁面數量是有限的。如果入口頁互相連結、层层嵌套,蜘蛛大量時間花在這些中間頁上,目标 URL 的排队位置就會被往後推。
換句话说,問题不是蜘蛛出不来,而是蜘蛛在入口层待得太久。日誌里常见的表現是:入口頁被抓了很多次,目标 URL 却迟迟没有出現抓取记錄。
什么情况下环會變成無底洞
静態的环形連結不可怕,可怕的是环里的連結是動態生成的。以下几種情况會让待抓取队列不断膨胀:
- 入口頁連結里带随机或递增的查询參數,每次訪問生成的連結都略有不同;
- 入口頁有“相關入口”模块,自動根據目前 URL 拼接出新的入口 URL;
- 入口頁带會话 ID 或時間戳參數,蜘蛛每次拿到的 URL 都不一样;
- 分頁没有上限,可以從第 1 頁一直翻到第 10000 頁。
這时候蜘蛛面對的不是一個环,而是一個近似無限大的 URL 空間。它會認為這些都是新 URL,持續排队抓取,抓取预算被大量浪費。
目标 URL 迟迟不入库,先查這几項
- 看服務器日誌里目标 URL 有没有被抓取记錄。如果一次都没有,說明蜘蛛還没走到那一步。
- 統計入口頁與目标頁的抓取比例。如果入口頁抓取量遠高于目标頁,說明中間层太厚。
- 检查入口頁連結是否由 JavaScript 生成。如果連結不在初始 HTML 里,蜘蛛可能根本看不到。
- 確認入口頁之間的連結是否有必要。能一层直達目标頁的,就不要绕三层。
环状連結不是被惩罚的理由,但它是一種低效结构。蜘蛛不會因為你做了环就不抓,但可能因為抓不完前面的頁面而晚抓。
調整思路
把入口頁当作路标,而不是内容。目标 URL 最好從入口頁直接可達,减少中間跳數。入口頁之間的互鏈可以保留少量做導航,但不要為了數量而堆叠。
另外,用 sitemap 明确告诉蜘蛛哪些是重点 URL,能在一定程度上帮助它分配抓取優先級。定期看日誌,關注入口頁和目标頁的抓取次數變化,比纠结环會不會被抓更有實际意义。
總结一句:搜尋蜘蛛不會因為环形連結陷入死循环,但會被大量低價值 URL 拖慢节奏。控制連結结构的深度和規模,才是让目标 URL 更快被發現的關键。