在收錄工具里看到“已抓取,尚未编入索引”,說明爬虫已经把頁面拿走了,但索引环节没有放行。這個狀態和“已發現但未抓取”不是一回事:前者卡在判断,後者卡在排队。把這两件事分開,排查才有落点。
先確認不是抓取层面的問题
狀態已经寫明抓到了,所以 robots、抓取频次這些通常不是首要怀疑對象。但有两處仍然值得先看一眼:抓到的是不是真正的正文版本,以及返回给爬虫的内容和用戶第一次看到的内容是不是同一份。
- 响應的狀態碼是不是 200,中間有没有夹带跳轉
- 靠 JS 渲染的頁面,抓到的 HTML 里有没有實质文字
- 主要内容是不是放在需要点击、滚動或登入之後才加载的区域
如果這一步就發現差距明顯,那么先解决抓取内容的問题,再谈其他。
内容层面:索引要的是一份能獨立成立的頁面
索引不是把 HTML 原样存下来,它要判断這一頁能不能單獨回答一個問题。以下几類内容會让這個判断變得困难。
- 正文主要由其他頁面拼凑或摘要组成,自己新增的信息很少
- 頁面上大部分文字是導航、篩選條件、參數表,真正說明問题的句子没几句
- 同一批頁面只改了几個词,其余完全一样
- 内容依赖用戶輸入、地理位置或登入狀態,爬虫拿到的是預設空態
這些情况不一定非要删頁面,但需要给頁面补上別的頁面没有的信息,或者把它收敛到主頁面上去。
结构层面:让頁面之間的關系说得清楚
頁面被索引时,系統還要判断它在站内處在什么位置、和哪些頁面相似。這里的常见問题有几個。
- 同一内容有多個 URL 都能打開,規范指向没有明确收敛
- 内鏈都指向列表頁,具体頁面只有 sitemap 里一個入口
- 目錄层級很深,中間没有可以点進去的路径
- 頁面上的主要出口都是站外連結,站内没有承接
規范标簽、内鏈、sitemap 這三者说的事情如果互相矛盾,索引环节更倾向于先放着不動。
一份可以照着走的排查顺序
- 拉出一份狀態為“已抓取,尚未编入索引”的 URL 清單,按模板和目錄分组
- 每组抽两三個頁面,在無缓存、未登入的狀態下看用戶第一次看到的是什么
- 用抓取工具看爬虫實际拿到的 HTML,和上一步的结果對比
- 看這组頁面在站内有没有獨立入口,入口是不是正文里的連結
- 看這组頁面之間、以及和主頁面之間,内容重合到什么程度
- 记下改動時間,隔一段時間再回来看同一批 URL 的狀態
分组的意义在于,同一個模板出問题,往往是几十上百個頁面一起卡在同一個狀態,逐個頁面改既慢又容易漏。
改動之後不要急着下结论
索引狀態的更新有自己的节奏。同一批頁面改完,几天到几周内出現不同步很常见。與其每天刷新狀態,不如先把同一模板的問题一次改完,再固定几個 URL 作為長期观察样本。
另外也要注意,這個狀態並不等于頁面被否定。搜尋需求本身稀薄、同類頁面已经足够多的时候,狀態也可能長期停在這里。這種情况更值得考虑的是頁面要不要合並,而不是繼續往上面堆内容。