搜索抓取

链接写在 JS 里,蜘蛛还能顺着找到下一层吗

页面在浏览器里看着正常,不代表蜘蛛抓取时能看到同样的链接。本文梳理那些只存在于 JS 渲染之后的导航、列表和分页入口,说明渲染抓取与源码抓取在顺序上的差异,并给出把关键链接放回 HTML、再用内链与 Sitemap 兜底的具体做法。

搜索抓取

链接写在 JS 里,蜘蛛还能顺着找到下一层吗

蜘蛛拿到的首先是原始 HTML

很多运营在浏览器里打开页面,导航、列表、分页都好好的,于是默认蜘蛛看到的也是同一个画面。但抓取阶段的第一步通常是取回 HTML 源码,源码里有什么链接,很大程度上决定了这一轮它能顺着走出去多远。JavaScript 带来的额外内容需要二次执行才能拿到,是否执行、什么时候执行,站方只能引导,很难直接指挥。

所以问题不在于"要不要用 JS",而在于关键层级的入口是不是只存在于 JS 渲染之后。

哪些链接容易漏在 HTML 之外

  • 用 onclick 或事件监听做跳转的卡片、按钮,源码里没有可跟随的 href。
  • 列表数据靠接口拉取,首屏 HTML 只有骨架,翻页靠点击后动态插入。
  • hash 路由形态(井号后面带参数),这部分通常不会被当成独立 URL 处理。
  • 下拉菜单、折叠面板里的二级导航,只有交互后才写进 DOM。
  • 按需加载的"相关推荐""猜你喜欢"模块,位置在页面底部,JS 没跑到就什么也没有。

这些入口在浏览器里体验没问题,但在只看源码的一轮抓取里,它们等于不存在。

渲染抓取存在,但排在后面

搜索引擎确实具备渲染能力,会把部分页面交给渲染环节处理,但这通常要消耗更多资源,也会排在抓取队列之后。抓取预算有限的时候,源码里能直接读到链接的页面,往往更容易被优先照顾。把核心入口全部押在渲染上,等于把 URL 发现的节奏交给了别人的排队顺序。

怎么判断自己是不是这种情况

最简单的办法是禁用 JavaScript 打开页面,或者直接查看网页源代码并用关键词搜链接。如果导航、分页、详情地址在无 JS 状态下全部消失,那蜘蛛第一轮看到的就是这个样子。再对比服务端日志里这些 URL 的出现频率,差异会更直观。

把入口搬回 HTML 的几种做法

  1. 主导航、面包屑、分页和列表首屏,用 a 标签配合服务端渲染输出,href 写成可访问的真实地址。
  2. 需要交互效果的按钮,可以改成 a 标签再用 JS 拦截点击,保留地址本身。
  3. 无限滚动最好保留一个"查看更多"或分页链接,指向对应的分页 URL,而不是只有滚动事件。
  4. 筛选、排序这类参数,如果希望被当成独立入口,至少要在 HTML 里给出可抓取的链接形态,同时控制组合数量,避免生成大量近似重复地址。
  5. Sitemap 可以补上重要但 HTML 中出现较少的 URL,作为发现层面的补充,但它替代不了内链。

内链和第二入口的配合

即使某个模块必须用 JS 渲染,也可以在页面其他位置给出同样目标的静态链接:正文里的引用、上一篇下一篇、专题聚合页、站点地图页。蜘蛛顺着这些路径走,一样能到达目标。真正需要注意的是层级——如果某个栏目的所有入口都集中在渲染之后,而外部又没有别的链接指向它,这个栏目就可能长期停留在"已发现但抓取很少"的状态。

判断标准其实很简单:关掉 JS,页面里还有没有一条从入口走到目标的链接路径。有,URL 发现就多一层保障;没有,就只能等渲染队列。

不必把所有交互都改成静态,重点是别让关键层级只存在于渲染之后。先保证主路径在源码里可读,再把体验交给前端,这样抓取路径和用户体验并不冲突。