蜘蛛抓取一个站点,起点通常是首页或少数几个被外链指向的 URL,然后沿着页面上可抓取的链接一层一层往下走。所以一个详情页“离入口几步能点到”,会直接影响它被发现的时间,也会影响它之后的回访频率。这个层级,通常叫链接深度。
链接深度是怎么算的
链接深度指的是从站点入口到某个 URL,需要经过的最少点击层数。首页本身算第 1 层,导航里直接列出的栏目页是第 2 层,栏目列表里排在前面的详情页是第 3 层。如果某个页面只能从第 5 页的分页列表进入,那它的深度就是 5 层左右。
蜘蛛没有“站点地图式”的全知视角,它靠链接走。深度越深,意味着它需要先抓取并解析更多中间页面,才能轮到这个 URL。
深度过深时,通常会看到哪些现象
- 发现变慢:新发布的详情页提交后迟迟没被访问,日志里只有栏目页和分页被抓。
- 回访减少:老页面更新后,蜘蛛很久不来一次,抓取间隔明显比对浅层页面长。
- 抓取预算被中间层消耗:大量抓取次数花在分页、筛选和聚合页上,真正的内容页反而分不到。
- 抓取路径高度依赖单一入口:日志里几乎所有详情页都从同一个栏目进来,一旦这个栏目改版,整片页面就断了入口。
这些现象并不等于“页面有问题”,更多时候是路径设计的问题。
先自查:某个 URL 到底藏得多深
在动手改之前,先弄清楚现状,比凭感觉调整更有意义。
- 拿十到二十个有代表性的 URL(新内容、老内容、冷门内容各挑几个),从首页开始只用鼠标点击,记录到目标页需要几步。
- 用抓取类工具从首页模拟爬行,限制最大深度,看哪些页面在设定的层数内没有被访问到。
- 翻一段时间的服务器日志,观察蜘蛛进入某个详情页时,前一个访问的 URL 是什么,是不是每次都要从栏目翻到很后面的分页。
- 对比同类页面的抓取频次,看深度差异是否和抓取间隔有明显关联。
几种常见的“人为加深”写法
- 列表页默认只展示前若干条,其余靠“加载更多”按钮,而这个按钮的链接不可抓取。
- 分页只提供“下一页”,没有跳转到指定页的普通链接,也没有可稳定访问的页码 URL。
- “相关内容”“猜你喜欢”等模块统一指向栏目首页或文章列表,而不是具体文章。
- 标签、专题只做一级,二级内容藏在多重条件组合的筛选结果里,没有固定入口。
- 导航和栏目链接由 JavaScript 事件绑定,href 为空或是“#”,蜘蛛拿不到可跟随的地址。
- 把一批内容放在需要选择地区、语言或登录之后才能看到的页面里。
把层级压回来的几个做法
让链接稳定可抓
凡是希望被发现的页面,尽量给出普通的 a 标签链接,让地址直接写在 href 里。加载更多、下拉菜单这类交互组件,可以保留原有体验,同时补一份可抓取的静态入口。
给分页和聚合页留固定 URL
分页页码、标签页、专题页如果能各自拥有稳定地址,并且互相之间形成正常的链接关系,蜘蛛就有更多条路走到深层内容。不必把每一页都放到导航里,但至少不要让深层页面只有“翻到第 8 页”这一个入口。
在正文页做相关性内链
正文页之间的横向链接,是缩短深度比较自然的方式。指向同主题、同系列、前后篇的具体文章,比指向栏目首页更有价值,也更容易被蜘蛛顺着走。
把重要入口放在稳定位置
核心栏目、热门专题、站点地图页,放在导航或页脚这类全站可见的位置,相当于给它们一个固定的浅层入口。
Sitemap 是补充,不是替代
Sitemap 能帮助蜘蛛知道有哪些 URL 存在,但它替代不了层级结构。只提交 Sitemap、内链却层层包裹,抓取效果往往会打折扣;两者配合,同时保证服务器响应稳定,URL 被发现和回访的节奏才会更可预期。
链接深度不是越浅越好,而是在保证页面可读性的前提下,别让重要内容被埋在三层以上,也别为了扁平把几百个链接堆在首页。
整理路径这件事没有一劳永逸的答案。站点结构、内容量、更新频率都会变,比较务实的做法是定期抽查一批 URL 的点击深度,结合抓取日志看看蜘蛛实际走的路线,再针对最明显的那一两个卡点做调整。