KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
04 · 索引:抓到了为什么还是不显示 — keel 龙骨
本章目标:讲清「索引(Indexing)」环节——文本如何被存储、什么情况下会被拒收、几种状态的准确含义。 验收标准:能区分「已发现未抓取 / 已抓取未索引 / 已索引」,并知道各自该查什么。
本章目标:讲清「索引(Indexing)」环节——文本如何被存储、什么情况下会被拒收、几种状态的准确含义。
验收标准:能区分「已发现未抓取 / 已抓取未索引 / 已索引」,并知道各自该查什么。
为什么索引是分水岭:前三章解决"能不能拿到内容",索引环节决定"拿到之后要不要收"。很多"收录为 0"的问题不是内容差,而是被 noindex、被判定重复、或干脆卡在队列里。
一、倒排索引与分词
搜索引擎不存网页原文,它建的是倒排索引(Inverted Index):以"词"为键,记录"哪些文档包含这个词"。
"rendering" → [doc1, doc7, doc42, ...]
"渲染" → [doc1, doc3, ...]
检索时先查词、再取文档集合求交,这就是为什么查询能秒回。分词决定"什么算一个词":
| 语言 | 分词方式 | 影响 |
|---|---|---|
| 英文 | 空格/标点切分 + 词干还原 | running → run |
| 中文 | 需要分词算法,无空格 | 分词质量直接决定召回 |
实践含义:
- 中文站点的分词由搜索引擎自己完成,你不能控制,但可以通过用词规范、少造词、标题含核心词来配合。
- 同义词/近义词由搜索引擎的词表处理,一个页面覆盖多说法有助于匹配更宽的查询。
- 停止词(的、了、是)通常不参与索引,不必刻意堆砌。
# 粗看页面里核心词的出现分布(辅助判断主题是否清晰)
curl -s https://www.xxxxxx.cn/learning/courses/tools/lessons/1/ \
| sed 's/<[^>]*>//g' | grep -oE '[一-龥]{2,}' | sort | uniq -c | sort -rn | head
二、可索引性判据
一个 URL 即使被抓取,也可能被明确拒绝入索引。四种"请勿索引"的写法:
| 机制 | 写法 | 生效范围 | 备注 |
|---|---|---|---|
| robots meta | <meta name="robots" content="noindex"> |
单页面 | 最常见 |
| robots meta(定向) | content="noindex, nofollow" |
不索引 + 不跟链接 | 慎用 nofollow |
| X-Robots-Tag 头 | X-Robots-Tag: noindex |
非 HTML(PDF、图片) | 响应头更早生效 |
| robots.txt | Disallow |
阻止抓取 | 不是 noindex,见下 |
最容易搞错的一点:
robots.txt的Disallow只阻止抓取,不阻止索引。
如果别的页面链接到它、或有外部链接,搜索引擎仍可能把它收录(只是没有正文摘要)。
要真正不进索引,必须让爬虫能抓到页面、然后读到noindex。
正确姿势:先允许抓取,再用 noindex 拒绝索引,确认被移除后才可以考虑用 robots 屏蔽。
# 检查响应头里有没有 X-Robots-Tag
curl -sI https://www.xxxxxx.cn/learning/ | grep -i 'x-robots-tag'
# 检查页面里的 robots meta
curl -s https://www.xxxxxx.cn/learning/ | grep -oE '<meta name="robots"[^>]*>'
三、重复内容与聚合页
同一个内容出现在多个 URL 上,就叫重复内容。搜索引擎会选一个作为规范版本,其余不收录或归并。
| 重复来源 | 例子 | 治理 |
|---|---|---|
| 协议/域名 | http vs https、裸域 vs www | 301 到 canonical |
| 尾斜杠 | /a vs /a/ |
全站统一 + 301 |
| 参数 | ?utm_source=、?sort= |
canonical + robots 屏蔽 |
| 分页 | 列表页第 2 页内容近似 | 保留但标注,或自引用 canonical |
| 聚合页 | 标签页/归档页与文章页重复 | 给聚合页写独立摘要或 noindex |
| 打印机版 | /print 版本 |
canonical 指向正文页 |
聚合页的处理原则:标签页、分类页只要有独立的组织价值(帮助发现、聚合主题),就该保留并抓好 canonical;如果只是纯筛选、无独立内容,用 noindex, follow。
四、索引选择与三种状态
GSC 的"覆盖率"报告里,同一个 URL 会落在不同状态,含义完全不同:
| 状态 | 含义 | 下一步查什么 |
|---|---|---|
| 已发现,尚未抓取(Discovered – currently not indexed) | 知道 URL,但还没排上队 | 抓取预算、内链权重(第 01、02 章) |
| 已抓取,尚未编入索引(Crawled – currently not indexed) | 抓了,但判定不值得收录 | 内容质量、重复、薄内容(本章) |
| 已编入索引(Indexed) | 已收录 | 剩下的是排序与呈现 |
| 重复网页,Google 选择了不同的规范网页 | 被判定与别页重复 | canonical 一致性(第 02 章) |
| 已排除,被 noindex 标记 | 你自己要求不索引 | 确认是不是误配 |
| 软 404 | 返回 200 但内容像"没有" | 检查空模板页 |
| 重定向错误 / 备用网页 | URL 规范问题 | 修 canonical/301 |
两个高频误解:
- "已抓取未索引"不等于内容差——也可能是内容与站点整体质量不匹配、或同一主题已被更好的页面覆盖。要看是不是"薄内容"或"与其他页高度重合"。
- "已发现未抓取"不是被惩罚——多半是抓取优先级不够,重点页面内链太弱。
# 用 site: 快速确认收录总量(唯一可靠的自检方式)
# 在搜索引擎里执行:
# site:www.xxxxxx.cn
五、薄内容与索引膨胀
薄内容(Thin Content):正文明显不足、或与其他页高度重复的页面。它会稀释整站质量判断。
常见来源:
- 由参数/筛选自动生成的近似页
- 空的标签页、作者页、日期归档页
- 只有标题没有正文的占位页
处理顺序:能合并的合并 → 能补内容的补内容 → 实在无价值的 noindex。不要直接删,先 noindex 并保留 301 到相关页,避免产生大量 404。
六、故障速查
| 现象 | 索引层原因 | 处理 |
|---|---|---|
| 收录为 0 但抓取正常 | noindex 误配 | 检查 meta 与响应头 |
| 重要页显示"已抓取未索引" | 薄内容或重复 | 补内容 / 合并 / 强化唯一性 |
| 重要页显示"已发现未抓取" | 内链权重低 | 加强内链与 sitemap |
| 搜索结果里的描述是别的页 | 被判定重复 | 修 canonical 一致性 |
| 收录数莫名膨胀 | 参数页/聚合页被收 | noindex 或 robots 屏蔽 |
| 页面被收录但显示登录页 | 软 404 | 未登录返回 401/403 |
七、本章验收
- 能说出
robots.txt Disallow与noindex的区别,并知道该用哪个 - 全站无重复 URL 形式,canonical 自引用且一致
- 能在 GSC 覆盖率报告里区分三种状态并说出对应处理
- 已识别并治理了薄内容/聚合页
- 用
site:www.xxxxxx.cn记录当前收录基线
# 索引层自检两连
curl -sI https://www.xxxxxx.cn/learning/ | grep -i 'x-robots-tag' || echo "无 X-Robots-Tag(正常)"
curl -s https://www.xxxxxx.cn/learning/ | grep -oE '<meta name="robots"[^>]*>' || echo "无 robots meta(可索引)"
内容进了索引,意味着它能被检索到了。但"能检索到"和"排在前列"是两回事——下一章讲排序。