有些頁面在浏览器里看是完整的,但打開源代碼,只有几個空的容器标簽和一段脚本。搜尋蜘蛛第一次拿到的就是這個版本,後面能不能被收錄,取决于它愿不愿意执行脚本、执行到什么程度、以及渲染窗口给多長時間。
抓取和渲染是两個阶段
多數搜尋引擎取一個頁面是分两步走的:先取回原始 HTML 做解析和入队,之後再排期执行頁面里的脚本,拿到渲染後的内容。如果原始 HTML 里没有标题、没有正文、没有可点的連結,第一次抓取能提取到的信息就非常有限。這不是「不收錄」,而是 URL 先進了待處理队列,什么时候渲染、會渲染几次,站点這邊基本控制不了。
自查:先確認蜘蛛拿到的是哪個版本
看未执行脚本时的响應
用命令行抓取工具或者临时關掉浏览器 JS,看返回的 HTML 里到底有没有标题、首段正文和主要内鏈。需要注意的是,不少抓取工具預設會执行脚本,给出的结果偏乐观,容易让人誤判。
用平台的抓取測試工具對比
搜尋资源平台里的抓取诊断、網址检查這類功能,通常會同时展示原始响應和渲染後的截图。把两份结果並排看,最容易發現問题是出在渲染环节還是出在内容本身。如果原始响應里连 H1 都没有,而渲染後一切正常,那基本可以确定是渲染依赖過重。
检查内鏈是不是也在脚本里
導航、面包屑、列表分頁如果全部靠 JS 注入,蜘蛛在渲染之前看不到任何入口。這些 URL 就只剩下外部連結和站点地图两條發現路径,發現节奏會明顯變慢。内鏈入口本来就少的新頁面,影响會更直接。
几種渲染方式的取舍
- 服務端渲染或构建时生成:产出的是完整 HTML,最稳,代價是要改架构或增加构建流程。
- 動態渲染:對蜘蛛返回预渲染版本,對用戶返回客戶端渲染版本。要注意两邊内容保持一致,差异過大有被判定為作弊的風險。
- 纯客戶端渲染:改動最小,但對 URL 發現和内容提取最不利,比較适合登入後才需要的那部分内容。
選擇哪種,本质上是問:這個頁面需不需要被搜尋到。需要被搜到的正文内容,尽量不要放在脚本执行之後才出現。
短期内只能客戶端渲染时能做什么
- 把标题、H1、首段正文、主要内鏈放進原始 HTML,哪怕样式上先隐藏。
- 保留一份 noscript 兜底說明,但只当作提示,不要把它当成主方案。
- 用稳定的静態 URL,避免依赖 hash 路由,也避免同一内容對應多個脚本參數地址。
- 内容從接口获取时,尽量让資料在首次响應里就带出来,减少二次請求。
- 把這些 URL 放進站点地图,给發現阶段补一條路。
- 首頁和栏目頁多给几條直接連結,別让新頁面只能靠站内搜尋找到。
容易忽略的一点:渲染结果要稳定
如果每次渲染出来的内容都不一样,比如推荐位随机排序、评论實时加载、價格按地区變化,蜘蛛可能反复渲染却拿不到一個稳定版本,索引里保留的往往是第一次渲染的快照。這时候正文主体和结构性内容最好固定下来,動態部分放在不影响主内容的区域。
渲染方式不是收錄的開關,它只决定蜘蛛能多快、多完整地看到内容。把正文放在原始 HTML 里,比让蜘蛛多跑几次脚本更可控。
如果你發現一批頁面長期停在「已發現,尚未编入索引」,可以先做一次原始 HTML 與渲染结果的對比,再决定是調整渲染方式,還是先补齐内鏈入口。