博客上线快半年了,一直以来我以为只要写好文章、搭个 RSS 订阅,就够了。最近把博客提交到了 Bing Webmaster Tools 和 Google Search Console,才发现"让搜索引擎找到你的网站"这件事,远比想象中复杂。
记录一下这段时间学到的东西。
Sitemap:网站的目录页
Sitemap(站点地图)这个名字很直白,就是给搜索引擎看的网站目录。
我的博客用的是动态生成的方式,访问 sitemap.xml 会返回所有已发布的文章列表和标签列表。代码大概是这样:
public function index(): Response
{
$posts = Post::publiclyVisible()->latest('updated_at')->get();
$tags = Tag::query()->whereHas('posts', fn ($query) => $query->publiclyVisible())->get();
return response()->view('front.sitemap', [
'posts' => $posts,
'tags' => $tags,
])->header('Content-Type', 'text/xml; charset=UTF-8');
}
只返回对外可见的文章,草稿和归档文章不会出现在里面。
然后在 robots.txt 里声明一下位置:
User-agent: *
Disallow:
Sitemap: https://blog.gankudadiz.com/sitemap.xml
这样搜索引擎爬虫来抓网站的时候,就能通过 robots.txt 知道 sitemap 在哪,顺着就能发现你所有的文章。
robots.txt:爬虫的入场须知
robots.txt 是一个简单的文本文件,放在网站根目录下。它告诉搜索引擎:哪些页面你可以抓,哪些你不可以。
我的配置很宽松,所有都允许:
User-agent: *
Disallow:
一个典型的小博客这么做没什么问题。但如果你的后台管理页面不想被索引(比如 /admin),就应该加一条:
User-agent: *
Disallow: /admin
这是最基础的理解:robots.txt 是一个"礼貌性"的协议,恶意爬虫不会遵守,但正常搜索引擎都会遵守。
IndexNow:让搜索引擎"即时"知道页面变了
这是让我觉得最有意思的东西。
传统的流程是:搜索引擎定期来抓你的网站,发现有新内容就收录。但这个"定期"可能是几天甚至几周。
IndexNow 是一种主动通知机制。当你的文章发布、修改或删除时,你的网站主动告诉搜索引擎:"嘿,我这里有变化,过来看看。"
我用的是 ymigval/laravel-indexnow 这个包,配置好了以后,在 PostObserver 里自动触发:
public function created(Post $post): void
{
if (! $post->isPubliclyVisible()) {
return;
}
$this->submitIndexNowUrls([
$this->currentPostUrl($post),
]);
}
规则写得比较细:
- 新建文章:提交新 URL
- 修改文章且 slug 没变:只提交当前 URL
- 修改文章且 slug 变了:同时提交旧 URL 和新 URL(因为内容迁移了)
- 删除文章:提交被删除的 URL
这个逻辑搞了好一会儿,主要是想清楚各种状态变化组合。
目前配置的是通用的 IndexNow 协议,Bing、Yandex 这些主流搜索引擎都支持。Google 虽然有自己的一套(Indexing API),但 IndexNow 提交一次能通知多个引擎,效率更高。
Search Console 和 Webmaster Tools:站长的仪表盘
这两个是搜索引擎提供的站长工具,听起来名字很唬人,其实功能挺朴实。
主要能做的事情:
- 提交 sitemap:让搜索引擎知道你的站点结构
- 查看索引状态:哪些页面被收录了,哪些没有被收录
- 检测爬虫错误:搜索引擎来抓的时候遇到了什么问题
- 性能数据:搜索结果中的点击率、曝光量
说实话我目前用得还比较浅,就是提交 sitemap、看看有没有报错。但光是"知道搜索引擎是怎么看我的站"这件事,就已经值了。
之前以为 RSS 就够了,太天真了
RSS 解决的是"让用户主动订阅内容"的问题。用户装一个 RSS 阅读器,订阅了我的博客,有新文章就会推过来。
但 RSS 不解决"让搜索引擎找到你"的问题。搜索引擎不知道你的 RSS 地址,它也不会去读你的 RSS 来更新搜索结果。
这是一个认知盲区:开发者习惯用技术手段解决问题(搭 RSS、做 API),但搜索引擎是另一套逻辑——它需要你主动告诉它你的站点结构、页面变化。
Sitemap、IndexNow、robots.txt 这些东西,本质上都是在"说搜索引擎能听懂的话"。
总结
这段时间折腾下来,最大的感受是:做网站不只是写代码。
域名解析、SSL 证书、SEO 优化、站长工具……这些都是开发之外的东西。好在都不算难,踩一遍就懂了。
写完感觉有点像笔记,但这就是我现在的理解水平。等过一年再回头看,大概会觉得幼稚吧——但那就是进步了。