做站点运营的人偶尔會遇到一種情况:查自己網站的收錄时,索引里冒出来一批自己没做過的地址。带一長串參數的、已经删掉的、拼寫不對的、大小寫不一致的,甚至還有压根没上過线的路径。看到這些先別急着批量删,處理動作選错了,反而會让問题拖得更久。
先確認:它們是真的在索引里吗
用 site: 查询只能当粗略參考,它给出的數量本身就不精确。要判断一個具体 URL 的狀態,用 URL 检查類工具更靠谱:看它是「已编入索引」,還是「已發現但未抓取」,或者「已抓取但未编入索引」。這三種狀態對應的處理方式並不一样。
另一個常见誤判是把「出現在站内」当成「出現在索引」。如果某個地址只出現在 sitemap、内鏈、订阅源或前端路由里,索引里其實没有它,那清理站内引用就够了,不必動用移除類操作。
把来源分類,別一上来就動手
同一個不存在的 URL,来源不同,處理顺序也不同。可以先按下面几類過一遍:
- 外部引用:別的站点連結了你的舊地址,或轉载时保留了老連結。
- 參數拼接:篩選、排序、跟踪參數被自動加到 URL 後面,生成大量變体。
- 寫法變体:大小寫、http 與 https、带 www 與不带、带尾斜杠與不带。
- 歷史遗留:改版前存在、現在已经下线的地址。
- 前端生成:脚本或路由按規則拼出来的路径,服務端並没有對應頁面。
- 站内文件残留:sitemap、订阅源或後台列表里還留着舊條目。
- 規范頁指错:某個頁面的 canonical 指向了一個並不存在的地址。
不同来源,處理動作不一样
頁面确實不存在
如果是外部連結或舊地址产生的,且站内没有内容等價的新頁面,让服務器正常返回 404 或 410 就好。為了让首頁「兜住」所有 404 而做全站 301 到首頁,效果通常不好,也容易让搜尋引擎判断你有一批重复的软 404。
URL 變体
這類問题的重点在源头:站内輸出的連結统一成一種寫法,導航、列表、面包屑都別混用。服務器层面可以做归一化跳轉,把變体收敛到唯一地址。參數頁則先問一句「這個參數有没有真實用戶需求」,有就保留並處理好規范頁,没有就別让它被大量連結到。
歷史遗留與規范頁指错
有對應新頁面的,用 301 把關系说清楚;没有對應頁面的,就让它自然消失。canonical 指向不存在的地址属于配置错誤,先改回正确目标,再观察索引是否跟着更新,顺序不要颠倒。
別用屏蔽代替判断
把一批不存在的地址全部寫進 robots.txt,往往只是让它們留在索引里,而不是把它們移除掉。
robots.txt 控制的是抓取,不是移除。一個已经被索引的 URL 被禁止抓取後,搜尋结果里仍可能顯示它,只是缺少描述。真正想让一個地址從索引里登出,要么让它返回 404/410,要么在頁面仍可訪問时用 noindex。判断清楚它该不该存在,比堆規則更重要。
一套可以照着走的核對顺序
- 取样:從索引里挑若干條不存在的 URL,不要只看一條就下结论。
- 確認狀態:逐條查它是已索引、已發現未抓取,還是已抓取未索引。
- 定位来源:外部連結、站内引用、參數規則、文件残留,找到就记下来。
- 判断归属:站内有没有等價的内容頁面?有就走 301,没有就让它 404/410。
- 修源头:清理 sitemap、统一連結寫法、修正 canonical、去掉無意义參數輸出。
- 复查:過一段時間再看同一批 URL,確認是否按预期登出,而不是频繁改規則。
長期该做的两件小事
一是保持站内只輸出一種規范的 URL 寫法,二是定期清理 sitemap 和订阅源里的舊條目。這两件事做到了,索引里冒出来的「陌生地址」會少很多,剩下的多来自站外,處理起来也简單。
收錄核對本身不是一锤子的事。把「抓取」「索引」「展示」分開看,先分来源再定動作,比看到異常就批量屏蔽要稳得多。