搭建蜘蛛池入口頁时,经常有人纠结一個問题:入口頁到底是老老實實放一個可点击連結,還是干脆用跳轉把搜尋蜘蛛直接送到目标 URL。前者看起来啰嗦,後者頁面干净、代碼少,還能顺便做統計。但從搜尋蜘蛛發現 URL 的机制上看,這两條路的效果並不一样。
先说结论
如果入口頁的核心目的就是让搜尋蜘蛛發現目标 URL,普通 a 标簽的 href 仍然是最稳妥的做法。跳轉不是不能用,但它意味着蜘蛛要先訪問入口頁、再执行一次額外動作,中間任何一环出問题,目标 URL 就 discovery 不到。而 a 标簽的 href 是 HTML 解析阶段就能拿到的,蜘蛛拿到列表後可以直接排進抓取队列。
meta refresh 和普通連結不是一回事
meta refresh 寫在 head 里,content 值通常寫成 0;url=目标地址。它對浏览器来说确實能跳轉,但對搜尋蜘蛛而言,它是一個頁面級指令,不是一個連結。蜘蛛需要先把入口頁抓下来、解析 HTML、识別這條指令、判断延迟時間,再决定要不要跟進。零秒刷新在多數引擎里會被当成跳轉處理,但優先級通常低于 301,而且如果入口頁每次都给不同目标,或者刷新目标和頁面内容完全無關,很容易被当成可疑行為。
301、302 和 meta refresh 的差別
301 是服務器层面的永久跳轉,蜘蛛跟進的确定性最高,原地址的信号也會往目标 URL 传递。302 是临时跳轉,蜘蛛一般也會跟,但可能繼續保留原地址。meta refresh 介于两者之間,属于頁面自己声明的跳轉,處理上更像一個弱化信号。也就是说,如果你确實要用跳轉,服務器 301 比 meta refresh 更可靠。
JS 跳轉的不确定性更大
location.href 這類寫法需要蜘蛛执行 JavaScript。虽然主流搜尋蜘蛛的渲染能力在提升,但渲染排队、渲染资源限制、頁面超时都會影响结果。對于 URL 發現這種越快進队列越好的需求,把希望押在 JS 执行上,等于把時間拉長了。更糟的是,如果入口頁本身没什么内容,渲染還可能被跳過。
實践中的寫法建议
- 目标 URL 用 a 标簽加完整 href 輸出,蜘蛛解析 HTML 时就能拿到。
- 如果确實需要跳轉,優先用 301,其次 302,尽量不用 meta refresh。
- 用 meta refresh 时,把延迟设為 0,同时入口頁保留一段說明文字,別做成纯跳轉空頁。
- JS 跳轉可以留给真實用戶,但同时在 noscript 或頁面底部放一個普通連結兜底。
- 跳轉鏈不要套太多层,一层就够,层层跳轉只會让抓取路径變長。
什么时候可以保留跳轉
入口頁本身面向真實用戶、需要做站点迁移或活動落地頁时,用 301 是合理的。但如果入口頁纯粹是给搜尋蜘蛛看的 URL 列表,跳轉只會增加不确定性。這種情况下,一頁放若干條普通連結,比一個漂亮的跳轉更實用。
跳轉解决的是用戶看到哪個頁面,連結解决的是蜘蛛知道哪些 URL。入口頁的定位如果是後者,就別用前者的方案。
另外要提醒一点:入口頁怎么布局,都只是让搜尋蜘蛛有机會發現目标 URL,並不能保證目标頁最终被收錄。發現、抓取、索引是三件不同的事,入口頁只作用在第一环。目标頁本身能否被索引,還取决于内容质量、站点整体表現等因素。把它当成一條线索入口,而不是一張收錄保證书,心態會更稳。