用前端框架搭建的页面,经常遇到一种情况:浏览器里看着内容完整,蜘蛛抓取到的却是一个空壳。收录延迟、只收录标题、索引内容缺正文,多半和 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”,而要确认蜘蛛第一次拿到的是什么。