做站内連結时,很多人預設只要頁面上出現了那個 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 會不會進入抓取队列。