很多蜘蛛池搭好之後抓取量上不去,常见原因不是入口頁數量不够,而是入口頁的連結藏在 JavaScript 里——蜘蛛拿到的只是一張空壳,能看到的只有容器和几個 script 标簽。入口頁的第一使命是让蜘蛛在原始 HTML 里就讀到通往目标站的連結,渲染方式直接决定這件事能不能成立。
不同搜尋引擎對 JS 的處理能力不一样
Googlebot 會执行 JS,但有渲染队列和渲染预算,連結發現往往要延迟數小时甚至更久;百度蜘蛛對 JS 的支持有限且不稳定,多數情况下只解析服務器返回的原始 HTML;Bingbot 介于两者之間。入口頁要面對的是尽可能多的搜尋引擎,所以最稳的做法是按最保守的假设设計:蜘蛛只讀原始 HTML,凡是不执行 JS 就看不到的内容,都不算數。
三種常见做法對比
1. 纯静態 HTML
- 源碼里就有完整連結、文本和标题
- 可以用模板批量生成,成本低
- 缺点是内容更新要重新生成或增量刷新
2. 服務端渲染(SSR)
- 蜘蛛請求时服務端拼好 HTML 再返回,源碼可讀
- 适合入口頁内容由資料库驱動、需要變化的场景
- 要留意首屏耗时,TTFB 過高會拖慢抓取节奏
3. 客戶端 JS 渲染(SPA)
- 源碼里只有挂载容器,連結由 JS 生成
- 對不执行 JS 的蜘蛛等于空白頁
- 只有在對 Googlebot 有明确需求时才考虑,並且要做無 JS 降級
連結必须是 a 标簽
入口頁指向目标站的連結,用 <a href="..."> 輸出最稳妥。onclick 跳轉、window.location 赋值、button 绑定事件,對不执行 JS 的蜘蛛来说都不是連結;即使是會渲染的蜘蛛,這類跳轉也容易被当成软跳轉,抓取價值打折。
URL 形態同样影响發現
hash 路由(#/path)後面的内容不會發送给服務器,蜘蛛基本不會單獨抓取,入口頁尽量用干净路径或少量查询參數。同一入口頁被跟踪參數拆成多個 URL,只會把有限的抓取预算摊薄,不如统一到一個規范地址。
怎么自查
- 關閉浏览器 JS,或用 curl、查看網頁源代碼,確認源碼里能看到目标站連結
- 在搜尋资源平台的抓取诊断中對比抓取到的 HTML 和渲染後的 HTML,两者差异越大越危險
- 翻入口頁訪問日誌,如果蜘蛛只来一次就不再回訪,通常是没解析到有效連結
- 检查控制台是否有 JS 报错導致渲染中断
實践建议
- 入口頁優先静態化,連結寫在源碼里
- 必须動態时用 SSR,把連結渲染進首屏 HTML
- 不要在同一入口頁混用多種渲染方案,容易出現内容不一致
- meta refresh 可以跳轉,但不如 a 标簽稳定,也更容易被当作跳轉頁處理
- 模板改動後,用無 JS 环境再抽查一遍
蜘蛛池解决的是連結能不能被看到,渲染方式决定的是這條鏈路上最基础的门槛。先把這一步做扎實,再谈入口頁數量和抓取配額才有意义。