用前端框架搭建的頁面,经常遇到一種情况:浏览器里看着内容完整,蜘蛛抓取到的却是一個空壳。收錄延迟、只收錄标题、索引内容缺正文,多半和 JS 渲染有關。但“抓取”和“索引”是两件事,不能只看搜尋结果就下结论。下面按一條可操作的核對顺序展開。
先分清:蜘蛛抓到了什么,索引了什么
蜘蛛第一次請求 URL 时,拿到的是服務器返回的原始 HTML。如果正文、連結、标题都靠 JS 注入,原始 HTML 里可能只有容器和脚本。之後頁面可能進入渲染队列,等搜尋引擎执行 JS 後再取一次内容。但渲染不保證發生,也不保證及时;即使渲染成功,索引时還會判断頁面质量、重复度和内容價值。所以核對时要把“原始 HTML”和“索引版本”分開看。
核對顺序:從原始 HTML 到索引版本
1. 查看原始 HTML 里有没有核心内容
不要只看浏览器開發者工具里的 DOM,要看“查看網頁源代碼”或抓取工具返回的原始响應。重点核對:
- 标题和正文是否出現在初始 HTML 中;
- 主要連結是否是真實的 a href,而不是 JS 点击事件;
- canonical、robots meta 是否由服務端輸出,而不是渲染後注入;
- 首屏關键内容是否依赖滚動、点击或延迟加载才出現。
如果原始 HTML 里没有正文,蜘蛛需要渲染才能理解頁面。渲染队列有優先級,低優先級頁面可能長時間停留在“已抓取但未编入索引”或“已發現”狀態。
2. 检查渲染资源是否被挡住
有些站点為了省抓取预算,在 robots.txt 里屏蔽了 JS、CSS 或接口路径。结果蜘蛛即使想渲染,也拿不到所需资源,只能看到空壳。核對时確認:
- 渲染所需的 JS、CSS 没有被 robots.txt 屏蔽;
- 關键 API 没有對搜尋引擎返回 403 或空資料;
- 頁面没有用 JS 做跳轉、彈窗或驗證碼拦截。
如果必须屏蔽某些资源,先確認這些资源不影响核心内容渲染。
3. 判断内容是否必须依赖交互
标簽頁、折叠面板、無限滚動、点击“加载更多”才出現的内容,渲染後也不一定會被完整抓取。搜尋引擎可能只渲染初始狀態,交互後的内容不進入索引。更稳妥的做法是:
- 核心内容預設可见,不依赖点击展開;
- 分頁使用真實 URL,而不是纯 JS 無限滚動;
- 标簽頁内容各有獨立 URL,或至少在初始 HTML 中完整輸出。
4. 核對索引版本是不是空壳
在搜尋结果摘要、URL 检查工具或缓存版本中,看索引到的内容是否包含正文。如果索引版本只有導航和标题,常见原因有三類:原始 HTML 無正文、渲染资源被挡、頁面质量或重复判断導致只保留部分内容。此时不要急着反复提交 URL,先回到第 1 步確認原始 HTML。
5. 给渲染留出稳定路径
如果业務上必须用前端渲染,可以考虑服務端渲染、静態预渲染或動態渲染。目标不是讨好蜘蛛,而是让核心内容在第一次响應中就可用。對搜尋引擎和用戶都更稳定。做完調整後,观察抓取日誌里的响應大小、狀態碼和抓取频次,再對比索引版本是否更新。
容易被忽略的三個细节
- JS 注入的 noindex:初始 HTML 没有 noindex,渲染後才加上,容易造成信号冲突。涉及索引控制的指令尽量服務端輸出。
- JS 生成的連結:如果站内連結都由前端路由生成,蜘蛛發現新 URL 的效率會下降。重要入口用真實連結輸出。
- 内容延迟加载:首屏正文等用戶滚動才加载,可能被抓到但索引不完整。關键内容不要依赖滚動触發。
收錄没有保證。上述核對只能减少技術障碍,让頁面更容易被抓取、渲染和理解。最终是否收錄,仍取决于頁面质量、重复度和搜尋需求。
總结一下顺序:先看原始 HTML,再看渲染资源,再看交互依赖,最後核對索引版本。多數 JS 頁面的收錄延迟,都能在這四步里找到线索。不要只盯着“提交了多少 URL”,而要確認蜘蛛第一次拿到的是什么。