KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
01 · 发现:搜索引擎怎么知道这个 URL 存在 — keel 龙骨
本章目标:讲清「发现(Discovery)」这一环节——搜索引擎是如何第一次听说你的某个 URL 的。 验收标准:能对任意一个新页面,说清它通过哪条路径被爬虫第一次看到。
本章目标:讲清「发现(Discovery)」这一环节——搜索引擎是如何第一次听说你的某个 URL 的。
验收标准:能对任意一个新页面,说清它通过哪条路径被爬虫第一次看到。
为什么这是第 01 章:抓取、渲染、索引都发生在"知道有这个 URL"之后。一个页面哪怕内容极好,只要从未被任何入口指向、也从未被提交,它在搜索引擎眼里就等于不存在。所有"我发布了但搜不到"的故事,第一层都要先问:它被发现了没有?
一、发现是整个流水线的入口
搜索引擎的索引不是从天上掉下来的,它由一个"待抓取队列"驱动。URL 进入这个队列的途径只有有限几条:
| 发现途径 | 谁在发起 | 特点 |
|---|---|---|
| 外部链接 | 别人网站上指向你的 <a href> |
最强,自带信任传递 |
| 内部链接 | 你自己网站内页面之间的链接 | 决定性,站内结构即发现路径 |
| sitemap | 你主动提交的 URL 清单 | 列出"候选",不保证被抓取 |
| 历史记录 | 该 URL 曾经被索引过 | 老站迁移时很重要 |
| 手动提交/API | GSC、Bing 的提交接口 | 快速但配额有限 |
| 重定向 | 301/302 的目标 URL | 迁移时的主要发现路径 |
| 外链的 sitemap/资源 | 他人的 RSS、聚合页等 | 边缘但真实存在 |
关键认知:sitemap 是"候选清单",不是"抓取指令"。你可以在 sitemap 里放十万条 URL,爬虫是否来抓、按什么顺序抓,取决于第 02 章讲的抓取预算。
二、链接图与权重传递
搜索引擎把整个互联网看成一张有向图:页面是节点,链接是边。一条链接 A → B 同时表达两件事:
- 发现:B 存在。
- 推荐:A 认为 B 值得看。
第二点被量化的经典模型就是 PageRank 式的权重传递。不必深究公式,理解三条实践推论即可:
- 一个页面的权重,约等于指向它的链接的质量与数量之和。被高质量页面链接,胜过被大量垃圾页链接。
- 链接是"投票",但票权不均等。同样一个外链,来自内容相关、本身受信任的站点,价值远高于来自目录站。
- 站内链接同样传递。你的首页、栏目页把权重分给下级页面,这是你能完全掌控的部分。
# 观察一个页面的站内链接分布(以自建站点为例)
curl -s https://www.xxxxxx.cn/learning/ \
| grep -oE '<a [^>]*href="[^"]+"' | wc -l
实践含义:如果你的重要页面只有首页顶端一个入口,其余全站都不指向它,那么它在链接图里就是一个"孤立节点"——发现权重极低。
三、外链与内链的作用边界
新手最容易混淆的就是这两者的分工。它们不是同一件事:
| 维度 | 内链(站内) | 外链(站外) |
|---|---|---|
| 你能控制吗 | 完全可控 | 基本不可控 |
| 主要作用 | 发现 + 站内权重分配 + 相关性上下文 | 信任与权威的背书 |
| 见效方式 | 结构一改就生效 | 积累缓慢,可能被惩罚 |
| 主要风险 | 内链成环/死链/权重被稀释 | 买到垃圾链接被判定作弊 |
| 官方明确表态 | 是(Google 明确鼓励良好内链) | 是(外链仍是重要信号之一) |
边界要说清:
- 内链决定"你希望搜索引擎重视哪些页面",这是你能主动设计的部分。
- 外链决定"别人多大程度认可你",你只能通过做出有价值的内容去赢得,不能"配置"出来。
- 不要用外链手段去解决内链问题。如果一个页面站内没有任何入口,先修站内结构,而不是去发外链。
四、一个 URL 被发现的完整路径
以本站一节课 /learning/courses/tools/lessons/1/ 为例,它可能被发现的路径:
首页 /learning/
└─ 课程列表页
└─ 课程详情页
└─ 第 1 课 ← 通过三层内链被爬虫顺着跟到
同时:sitemap.xml 中列出了该 URL(作为候选)
同时:若有人在外部分享,则多一条外链入口
验证:用无 JS 的 curl 顺着链接能否走到底?
# 从首页出发,抓取所有站内链接,看目标页面是否可达
curl -s https://www.xxxxxx.cn/learning/ | grep -oE 'href="[^"]+"' | sort -u
如果某重要页面在任何层级的 HTML 里都找不到 <a href>,而只在 sitemap 里,那它的发现就完全依赖爬虫主动读 sitemap —— 这是有风险的单点。
五、你要满足的准入条件
| 条件 | 判据 | 不满足的后果 |
|---|---|---|
| 页面有至少一条可抓取入口 | 站内有 <a href> 或外部有链接 |
只能靠 sitemap,发现慢甚至不发生 |
| 入口链接本身可被抓取 | 入口页不是 noindex、不被 robots 屏蔽 | 链接等于不存在 |
| sitemap 覆盖了全部重要 URL | SQL:sitemap 条数 ≈ 站内可达 URL 数 | 新页面发现延迟 |
| URL 稳定且唯一 | 无重复参数形式 | 同一内容多入口,权重分散 |
| 不是孤立节点 | 从首页出发 N 跳可达 | 长期不被抓取 |
六、故障速查
| 现象 | 最可能的发现层原因 | 处理 |
|---|---|---|
| 新页面几天都不出现 | 无任何入口,且未提交 sitemap | 内链 + 提交 URL |
| 只有首页被收录 | 内链是 JS 生成的,爬虫看不到 | 改成 HTML 直出的 <a href> |
| 部分页面收录部分不收录 | 抓取预算有限(见第 02 章) | 提升重要页面的内链权重 |
| sitemap 提交了但没用 | sitemap 里全是 301/404 | 只放 200 的 canonical URL |
| 站内链接成环、互相指 | 结构没分层 | 用面包屑 + 层级目录重排 |
七、本章验收
- 能画出你站点从首页到任意页面的链接路径(不超过 4 跳)
- 确认所有重要 URL 都至少在 HTML 里有一条
<a href>入口 - 确认 sitemap 覆盖了全部重要 URL,且条数与站内可达页面数大致吻合
- 确认没有任何重要页面是"只靠 sitemap 发现"的孤立节点
# 一条命令粗看首页出链数量与是否含目标页面
curl -s https://www.xxxxxx.cn/learning/ | grep -c '<a '
发现是起点。URL 被发现了,下一章的问题才轮到"爬虫愿意花多少成本来抓它"——那是抓取预算的事。