做站内链接时,很多人默认只要页面上出现了那个 URL,蜘蛛就能顺着走过来。实际情形要细一些:蜘蛛读的是 HTML 里的链接元素,不是人眼看到的可点区域。同一个跳转,前端做得再顺滑,如果链接形态不对,路径就断在那一页。
蜘蛛走的是链接元素,不是你看到的可点区域
蜘蛛发现新 URL 的渠道有限,主要靠解析页面里带 href 的链接,以及 Sitemap、提交接口这类外部输入。所以问题往往不是“有没有放链接”,而是“放的是不是蜘蛛能读的那种链接”。
最不容易出问题的写法
- 用原生 a 标签,href 写完整地址或可解析的相对路径,不要用按钮加事件代替。
- 锚文本写清楚目标页讲什么。蜘蛛靠它判断上下文,用户也靠它决定点不点。
- 同一个目标页尽量用统一 URL,带参数的变体容易把抓取分散到多个地址上。
- 图片跳转要把图片包在 a 标签里,光给图片加 alt 不能当链接用。
几种常见的“蜘蛛看不见”的链接写法
用脚本监听点击跳转
把跳转写成按钮绑定事件,或者写成 javascript:void(0),蜘蛛在原始 HTML 里看不到目标地址。即使渲染能力较强,也依赖脚本执行和等待时间,能拿到和稳定拿到是两件事。如果必须用前端路由,至少保证服务器返回的 HTML 里有一份对应的 a 标签,或者在页面底部放一份可被解析的链接列表。
图片、图标与热区地图
导航用图标、正文用图片跳转很常见。图片本身不带地址,必须由 a 标签承载。图片作为链接时,alt 描述的是图片内容,无法完全替代锚文本,目标页会少一份上下文说明。热区地图的写法蜘蛛通常识别不了,重要入口别只放热区。
下拉菜单、Tab 与折叠面板
如果菜单项在初始 HTML 里就存在,只是被 CSS 隐藏,一般不影响发现;如果要点开之后才由脚本插入 DOM,就要看渲染是否成功。判断方法很直接:在浏览器里禁用 JavaScript 刷新页面,看链接还在不在。
iframe 与第三方组件
iframe 里的链接属于另一个文档,蜘蛛对它的处理不如主文档干脆。评论区、站内搜索、外部挂件里的链接,不要当成主要的内链来源。
能发现,不等于能被抓
链接可读只是第一步,后面还有几层过滤要看:
- nofollow:链接还在页面上,但发现信号会被削弱,适合用在确实不值得跟的地址上。
- robots.txt:路径被剪掉后,蜘蛛不会去请求,页面里链接再多也没用。
- canonical:页面上有链接,但规范地址指向别处,抓取和归属判断会跟着变。
- 状态码:指向 404、410 的链接会白耗抓取次数,也会让蜘蛛少走这一支。
给蜘蛛留一条稳的路:可操作的检查顺序
- 新页面发布后,确认至少有一个可被解析的 a 标签指向它,最好来自一个已经被抓取的页面。
- 禁用 JavaScript 再刷新一次,检查导航、列表、分页里的链接是否仍然存在。
- 关键入口不用 onclick、不用纯图片、不用热区;次要入口可以,但要另给一条文本链接。
- 定期用服务器日志对照,找出从没被请求过的 URL,回头看看它们有没有可解析的入链。
- 把 Sitemap 当作兜底手段:它不保证被抓,但能给缺少强内链的页面一个被发现的机会。
链接的可发现性是地基,抓取与否还要叠加服务器响应、页面体积和抓取预算等因素。地基修好,后面的问题才有得谈。
小结
与其反复纠结蜘蛛为什么不来,不如先把链接写回它最容易读的形态。一个标准 a 标签、一句说得清的锚文本,往往比一堆前端动效更能决定 URL 会不会进入抓取队列。