先说结论:绝大多數情况下,連結里带 # 锚点不會阻止搜尋蜘蛛發現前面的目标 URL;真正需要担心的是 href 寫成 #、javascript:void(0),以及把目标地址藏在 # 後面的前端路由寫法。
搜尋蜘蛛怎么處理带 # 的連結
URL 中 # 後面的部分叫片段标识符,也就是 fragment。浏览器向服務器發起請求时,# 及其後面的内容不會發送给服務器。搜尋蜘蛛在解析 HTML 連結时,一般也會把带 # 的地址做規范化處理,只保留 # 之前的部分作為抓取目标。
例如入口頁寫 <a href="https://example.com/article#part-2">查看詳情</a>,搜尋蜘蛛通常會把 https://example.com/article 作為候選 URL 记錄,不會因為 #part-2 而放弃抓取。片段只影响浏览器跳到頁面内位置,不影响服務器返回内容。
哪些寫法會真正阻断發現
- href 寫成 # 或 javascript:void(0):連結没有指向真實 URL,搜尋蜘蛛基本不會去請求目标地址。
- 把目标 URL 拼在 # 後面:例如 href="/entry#/target/page"。這是前端 hash 路由的常见寫法,搜尋蜘蛛看到的是入口頁自身,而不是 /target/page,發現效率會差很多。
- 用 onclick 跳轉代替 href:即使视觉上可点,搜尋蜘蛛也不一定执行脚本,容易漏掉目标 URL。
排查入口頁連結是否有效
- 查看入口頁源碼,確認目标地址出現在 href 属性里,而不是 onclick、data-url 或 # 後面。
- 用抓取工具或日誌查看搜尋蜘蛛是否請求過目标 URL,而不是只請求入口頁。
- 如果使用前端路由,尽量给每個目标 URL 提供可訪問的服務端路径,或同时在頁面里放普通 a 标簽。
- 检查入口頁是否被 noindex、robots 屏蔽,這些會影响入口頁被抓取,間接影响連結發現。
蜘蛛池场景下的建议
蜘蛛池入口頁的價值是让搜尋蜘蛛顺着連結發現目标 URL。連結寫法越接近普通 HTML 超連結,發現路径越直接。带 # 的锚点可以保留,用来指示頁面位置,但不要把目标 URL 的主体藏在 # 後面。如果入口頁是單頁應用,至少保證目标 URL 在服務端返回的 HTML 里有可解析的 a 标簽。
带 # 锚点的普通連結通常不影响發現目标 URL;真正影响的是 href 里没有真實地址、目标 URL 被放在 # 之後的寫法。
锚点連結和跟踪參數不一样
锚点不會發送到服務器,通常不會被当成新 URL 重复抓取;跟踪參數會改變查询字符串,可能被视作不同 URL。若入口頁連結里既有 # 又有跟踪參數,搜尋蜘蛛一般會忽略 # 部分,但仍可能把參數部分当成不同地址處理,需要配合 canonical 或 URL 規范来收敛。
從日誌確認發現路径
如果入口頁日誌里搜尋蜘蛛只抓了入口頁,没有出現目标 URL 的請求,先检查 href 是否真實可解析,再检查目标 URL 是否被 robots、登入或防火墙拦住。不要只看入口頁狀態碼 200 就認為連結一定被跟随。
最後提醒:連結可發現不代表一定被抓取和收錄,還取决于目标 URL 的可訪問性、内容质量、抓取配額和站点整体情况。把入口頁連結结构做清晰,只是减少不必要的發現障碍。