入口頁能被蜘蛛抓到,前提是蜘蛛拿到的 HTML 里确實有可解析的内容。渲染方式决定了這件事的难易程度:静態 HTML 是直接把结果交给蜘蛛,SSR 是服務端先算好再輸出,前端渲染(CSR)則是把渲染工作留给浏览器。三者對抓取的影响差別很大,方向選错,後面补多少連結都很难拉回来。
先搞清楚蜘蛛拿到的是什么
多數搜尋引擎蜘蛛的第一轮抓取只處理 HTTP 响應体里的 HTML。遇到需要 JS 才能出内容的頁面,會被放進渲染队列,由渲染服務执行後再解析。這個队列的優先級通常低于普通 HTML 抓取,延迟可能是數小时到數天,而且不保證一定执行——尤其当頁面本身看起来像低價值内容时。
判断标准很简單:把頁面的 HTML 源碼(不是浏览器里的 DOM)抓下来,連結和目标内容在不在里面。在,就是安全的;不在,就依赖渲染队列。
三種方案的取舍
纯静態 HTML
入口頁的主要任務是让蜘蛛顺着連結繼續走,内容结构本来就简單,静態 HTML 往往是最省事的選擇。它的優势是确定的:不依赖渲染、响應快、抓取成本低、出問题容易排查。
- 适合連結列表、分類目錄、简單聚合頁這類结构固定的頁面;
- 頁面体积可以压得很小,几 KB 就能装下几十條連結;
- 變更时重新生成即可,不需要額外维護渲染服務。
需要注意的是別把静態頁做成「生成後就再也不動」的死頁——蜘蛛回訪时長期零變化,回訪频率會慢慢降下来。
服務端渲染(SSR)
当入口頁需要讀資料库、按條件组合連結,又不想让蜘蛛面對空 HTML 时,SSR 是折中方案。服務端把資料拼成完整 HTML 返回,蜘蛛看到的就是最终结果。
- 代價是每次請求都要执行一次渲染逻辑,QPS 高时 CPU 和响應時間會吃紧;
- 建议對蜘蛛 UA 與普通訪客走同一條渲染路径,避免出現「专门给蜘蛛的版本」這種容易出問题的分叉;
- 渲染超时會直接變成 5xx 或半截頁面,超时阈值要留足余量。
前端渲染(CSR)
纯 JS 渲染的入口頁對蜘蛛不友好。連結寫在 JS 里、内容靠接口异步拉取,第一轮抓取基本只能看到一個空壳。即使渲染队列执行了,也常因為接口超时、鉴權、跨域等原因拿不到完整内容。
如果技術栈已经是前端框架,至少要做到:關键連結用 a 标簽加 href 輸出到初始 HTML,而不是点击事件绑定;内容区块做服務端预渲染或提前静態化;避免把整站導航放在客戶端路由里。
怎么驗證渲染有没有生效
- 用 curl 或關閉 JS 的浏览器請求入口頁,對比看到的連結數量;
- 查看服務器日誌里蜘蛛是否額外請求了 JS、CSS、接口文件——有,說明它在尝试渲染;
- 检查這些资源的响應狀態和耗时,接口返回 403 或超過几秒,渲染基本會失敗;
- 如果發現蜘蛛频繁拉取但目标 URL 始终没被抓,優先怀疑渲染环节,而不是連結本身。
落地建议
- 入口頁優先級最高的内容,一律以静態或 SSR 形式出現在初始 HTML 中;
- 不追求頁面的视觉效果,把预算花在响應稳定和連結可解析上;
- 减少渲染层級,能用 HTML 表達的列表不要用 JS 拼;
- 上线前固定做一次「關 JS 检查」,把它当作入口頁的基本驗收項。
渲染方式不是性能優化话题,而是抓取可行性問题。先保證蜘蛛第一轮就能讀到東西,再谈更新频率、連結结构和數量規划,顺序颠倒會把後面的工作全部變成無用功。