做蜘蛛池的时候,很多人会打开浏览器看入口页,觉得“内容挺全、链接也不少”,就默认蜘蛛看到的也是这些。但搜索引擎蜘蛛来抓取时,默认拿到的是服务器返回的 HTML 源码。浏览器里那些由 JavaScript 拼出来的文字、图片和链接,如果没有出现在源码里,对蜘蛛来说就等于不存在。
蜘蛛拿到的默认是源码
入口页一般要干两件事:一是让蜘蛛拿到一个能读的页面,二是让蜘蛛顺着链接走到目标页。这两件事都依赖“源码里有没有东西”。搜索引擎虽然对 JS 渲染有一定处理能力,但渲染要走额外的队列,消耗更多资源,也不保证把页面上的每一块都执行完整。把关键内容放在源码里,是最省事的做法。
哪些写法会让入口页“变空”
- 整站前端渲染:页面框架先返回一个空壳,正文和列表等接口数据回来后再填进去。蜘蛛抓取时接口可能还没被调用,看到的是一片空白。
- 链接用 JS 事件跳转:列表项绑定 onclick 或前端路由跳转,源码里没有可跟随的 href,蜘蛛拿不到通向目标页的路。
- 文字藏在图片或图标字体里:导航、标题、锚文本都用图片或字体图标实现,源码里没有对应文本,蜘蛛读不到你要传达的关键词方向。
- 关键区块按需加载:内容要滚动到底、点击“加载更多”才出现,蜘蛛不会替你滚动页面。
- 跳转靠定时器:用 setTimeout 在几秒后跳转,源码里看不到跳转意图,蜘蛛可能在原地就停了。
入口页更稳妥的渲染方式
- 首屏正文、列表标题、分页导航由服务端直接输出,保证不看 JS 也能读到内容。
- 所有希望蜘蛛跟随的链接都用标准 a 标签,href 指向真实 URL,不要用 # 或 javascript: 占位。
- 需要跳转的页面用 301 或 302,让跳转信息出现在响应头里,而不是写在脚本里。
- 分页、列表页尽量使用可访问的 URL 形式,方便蜘蛛一页页顺着抓下去。
- 结构化数据内联在源码里,不要等前端脚本注入。
动手自查的几个动作
- 在浏览器里打开“查看网页源代码”,搜索入口页的核心词,看它是否真的出现在源码中。
- 用 curl 带上蜘蛛 UA 抓一次入口页,对比返回内容和浏览器里看到的是否一致。
- 临时禁用 JavaScript 打开页面,看正文和出链还在不在。
- 用搜索引擎提供的抓取测试工具跑一次,看抓取结果里的 HTML 是什么样。
判断标准很简单:如果关掉 JavaScript 之后,入口页的正文和出链就没了,那蜘蛛大概率也看不到同样的东西。
常见误区
- 把“我能看到”当成“蜘蛛能看到”,只看渲染后的画面,不看源码。
- 以为搜索引擎一定会执行 JS,于是把入口页的核心内容全部交给前端。
- 只改了首页模板,列表页、详情页仍在客户端渲染,蜘蛛走到第二层又断了。
什么时候可以接受 JS 渲染
如果页面上的交互、筛选、局部刷新只是锦上添花,核心正文和主要出链在源码里已经完整,那么用 JS 增强体验没有问题。真正需要避免的是“没有 JS 就没有内容”的结构。对于批量铺设的入口站,模板往往来自采集或接口接入,改模板的成本远低于后期排查为什么蜘蛛只来不走的成本。
把渲染这件事理顺,不保证收录,也不保证排名,它只是让蜘蛛在有限的抓取次数里,少做无用功,把机会留给真正需要被发现的目标页。