很多人把收錄当成内容好坏的問题,但蜘蛛在判断内容之前,先要拿到一個 HTTP 狀態碼。狀態碼是服務器给出的第一层信号,它决定了蜘蛛接下来是解析頁面、放弃這個 URL,還是過几天再来看看。
抓取和收錄分两步,狀態碼作用在前一步
抓取是蜘蛛把 URL 下载下来,收錄是下载结果经過判断後寫進索引。狀態碼主要影响第一步:蜘蛛看到什么碼,决定要不要往下走。如果返回的是错誤狀態,後面的内容质量根本用不上,頁面压根進不了正文解析和索引评估环节。
常见狀態碼各自的分工
200:正常,但不等于會收錄
200 只說明這個 URL 有内容可讀。蜘蛛拿到 200 後會繼續解析 HTML、抽取正文、看 canonical、看 noindex,再决定是否入库。所以 200 是必要條件,不是充分條件。
這里還有一個容易混淆的点:noindex 通常寫在 meta 标簽或响應头里,頁面本身仍然返回 200,蜘蛛也能正常抓取,只是不允许寫入索引。它和 404 的区別在于,404 是“這里没有東西”,noindex 是“這里有東西,但別放進去”。
301 和 302:一個搬家,一個临时借住
301 表示永久迁移,原 URL 的信号會逐步轉移到新地址,蜘蛛會把舊地址從索引里替換掉。302 是临时跳轉,蜘蛛一般會保留原 URL,並反复回来检查它是否恢复。舊地址确實不用了就用 301;只是短期切換,比如活動頁、A/B 測試,用 302,別拿 302 当長期重定向使。
404 和 410:都是“没了”,態度不同
404 表示资源不存在,410 表示资源曾经存在且已永久刪除。两者都會让 URL 逐步登出索引,但 410 的表態更明确,蜘蛛放弃得更快。頁面删了但内容還想換個形式保留,別急着用 404;確認不要了,410 更干脆。需要注意的是,返回 404 的頁面如果還挂在導航和内鏈里,蜘蛛會反复来撞墙,白白消耗抓取配額。
503 和 500:服務器問题,別让蜘蛛誤會
503 表示服務暂时不可用,配合 Retry-After 响應头,蜘蛛會稍後再来,通常不會立刻把頁面從索引里删掉。500 是服務器内部错誤,短時間大量出現时,蜘蛛會主動降低抓取频率。如果只是维護或临时故障,用 503 而不是让頁面全變成 404,否則恢复之後還要重新等一轮收錄。
软 404:最容易被忽略的一種
软 404 指的是服務器返回 200,但頁面内容是“没有结果”“商品已下架”“该内容不存在”之類的提示。蜘蛛拿不到错誤碼,會把它当正常頁面解析,结果索引里留下一堆空壳頁面,正文几乎為空。
常见来源包括:篩選出空结果的列表頁、下架商品保留的詳情頁、參數错誤跳到的兜底頁。處理方式有两種:确實不该存在的,改成 404 或 410;還有價值的,比如缺货但會补货的,就补上替代推荐和說明内容,让它成為真正的 200。
几個實操建议
- 改版批量重定向时,確認跳轉鏈條只有一跳,避免 301 套 301。
- 刪除頁面後同步清理内鏈和 sitemap,別让 404 長期挂在導航里。
- 临时维護優先用 503 加 Retry-After,而不是直接關站返回 404。
- 定期抽查“有流量但打開没内容”的 URL,看是否存在软 404。
- 狀態碼變更後,观察服務器日誌里蜘蛛的回訪频率,作為是否生效的參照。
狀態碼不是技術细节,而是你在向蜘蛛說明這個 URL 的命运。该删的删干净、该轉的轉到位、该等的说清楚,收錄這件事會少走很多弯路。