蜘蛛池入口頁有一種常见寫法:每次請求從 URL 池里随机抽一批連結渲染到頁面上,刷新一次換一批。這種做法對人工查看省事,但對搜尋蜘蛛是否友好,很多人没想清楚。下面按發現逻辑拆開说。
先说结论
搜尋蜘蛛是按 URL 處理的,不是按整站處理的。只要某個目标 URL 在至少一次被抓取到的入口頁 HTML 里,以可解析的連結形式出現過,它就有机會進入待抓队列。随机返回本身不等于屏蔽,真正的問题是覆盖率和入口頁被抓取的次數够不够。
决定覆盖率的三個變量
假设 URL 池總量是 M,入口頁每次返回 N 條連結,搜尋引擎在一段時間内重抓该入口頁 k 次,那么單個目标 URL 至少被展示一次的概率大致是 1-(1-N/M) 的 k 次方。三個變量分別對應:
- M,池子總量:池子越大,單次抽样命中某個特定 URL 越难。
- N,每次返回條數:太小則覆盖慢,太大則頁面變重,容易被当成低质列表頁。
- k,入口頁被重抓的次數:這是最容易被忽略的一項,也是随机方案能否成立的命门。
從上面這個關系能看出:如果入口頁本身權重低、更新信号弱,k 長期停在個位數,随机方案基本等于永遠覆盖不全。
几種常见的坑
頁面看着變了,抓取工具看到的却是空壳
不少入口頁的連結是前端渲染之後才出現的。如果連結来自异步接口,首次返回的 HTML 里根本没有它,那么随机對搜尋蜘蛛就等于不存在,返回多少次都一样。驗證方式很简單:關掉 JavaScript 再請求一次,看返回的 HTML 里有没有目标連結。
對爬虫和真人返回差异過大的内容
如果為了省事,直接按 UA 返回两套完全不同的頁面,風險不只是漏抓。搜尋引擎對刻意区分對待的行為一向敏感,這類做法可能被判定為伪装,得不偿失。
入口頁被反复解析,抓取配額被浪費
随机列表意味着同一入口頁每次返回的结构都在變。蜘蛛每次抓取都要重新解析頁面,如果連結重复率高、指向的 URL 早就抓過,等于把抓取配額花在重复劳動上。池子越大,這種浪費越明顯。
更稳妥的做法
- 静態列表加固定分頁:把池子拆成固定分頁,每頁連結不變,蜘蛛可以按頁推進,覆盖進度可控。
- 用 sitemap 兜底:入口頁负责给入口,sitemap 负责给全集,两者分工,比让入口頁承担全部發現任務可靠得多。
- 列表頁之間要有区分度:至少让每頁的标题、描述與其中收錄的 URL 相關,別用同一套模板套一萬頁。
- 控制單頁連結數量:一頁几十條通常比一頁上千條更容易被完整處理。
- 必须随机时,保留一個静態全量入口:随机頁负责展示,静態頁负责發現。
怎么驗證有没有漏
- 在服務器日誌里看入口頁被搜尋蜘蛛抓了多少次、間隔多久。
- 對比池子里的 URL 總數和日誌中出現過抓取记錄的 URL 數,算出覆盖率。
- 挑几個長期没被抓的目标 URL,回头查它們有没有在某個版本的 HTML 里出現過。
随机展示不是不能用,但它把發現這件事交给了概率。如果入口頁抓取频次上不去,随机只會让覆盖率長期停在低位;想稳定,還是靠固定列表加 sitemap。另外提醒一句,被發現、被抓取、被收錄是三個不同的环节,本文只讨论第一环。