站是 10 月初上线的,32 篇文章,一天发一两篇,sitemap 生成好了,robots.txt 也写了,百度站长平台验证过了,还提交了 sitemap。
一个月后,我在百度搜 site:moxiaoa.com。
结果:1 条。
就首页,一篇文章都没收录。
那几天我在金山出租屋里盯着这个结果看了很多遍,一度怀疑是不是自己站做得太烂。后来一项一项查,发现是三个实打实的配置问题,不是内容问题。
这篇把排查过程写完。
先说结论
| 问题 | 影响 |
|---|---|
| canonical 和推送 URL 不一致(有无 www) | 搜索引擎认不清哪个是主版本,不收录 |
| JSON-LD 结构化数据被中文引号破坏 | 结构化数据解析失败,等于没写 |
| keywords 只输出分类名 | 页面主题识别模糊,长尾词进不来 |
三个都不是"内容不行",是技术细节没对齐。
一、用 site: 查收录,本身就有坑
先说个前提:site: 这个查询在百度不太准。
- 结果数不准,有时候显示 1 条,实际可能有几十条
- 刚收录的内容可能延迟几天才出现
- 不同地区、不同时间查,结果不一样
我第一次查的时候,curl 直接请求百度搜索页,被 302 到验证码页。后来用浏览器带着登录态去查,才看到"找到相关结果数约 1 个"。
所以查收录别只看 site:,还要看:
- 百度站长平台的"索引量"数据
- 直接搜文章标题,看能不能搜到
- 搜文章里的独特句子
我后来用文章标题去搜,32 篇一篇都搜不到,这才确定是真没收录。
二、原因一:canonical 写的是不带 www 的
这个问题最隐蔽。
我的站有两个访问地址:
https://moxiaoa.comhttps://www.moxiaoa.com
服务器没做强制的 www 跳转,两个都能访问,页面内容完全一样。
而页面里的 canonical 写的是 https://moxiaoa.com/post/xxx.html,我提交给百度的 sitemap 和主动推送里写的却是 https://www.moxiaoa.com/post/xxx.html。
对搜索引擎来说,这是两个不同的 URL,指向同一份内容。结果就是:
- 不知道哪个是主版本
- 两个版本互相分权重
- 干脆都不收录,或者只收一个
正确的做法只有一条:全站统一一个版本,其他版本 301 过去。
我现在是把 moxiaoa.com 也 301 到 www.moxiaoa.com,canonical 全部改成带 www。
顺便说,我那个 .cn 域名也是同一套逻辑——全站 301 到主域,这个之前单独写过。
三、原因二:JSON-LD 被中文引号搞坏了
这个是我自己写脚本时埋的坑。
文章页里有一段结构化数据,告诉搜索引擎"这是一篇文章、标题是什么、作者是谁、发布时间是什么":
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "为什么我花半个月折腾 E5-2696V3",
"author": {"@type": "Person", "name": "陌笑技术分享"}
}
</script>
问题出在 headline 里的中文引号。
我的文章标题里有《》和"",生成的时候没转义,JSON 里直接塞了中文引号,json.loads() 一跑就报错:
json.decoder.JSONDecodeError: Expecting ',' delimiter
结构化的脚本标签坏了,搜索引擎解析失败,这段等于没写。
更麻烦的是,有些解析器遇到坏 JSON 会直接放弃整页的结构化数据读取。
修复方式很简单:生成 JSON 的时候用 json.dumps(obj, ensure_ascii=False),别手拼字符串。中文引号会被正确转义,< > 也会处理掉。
四、原因三:keywords 只写了一个分类名
我原来的模板,keywords 是这样输出的:
<meta name="keywords" content="Docker,陌笑技术分享">
所有文章都是"分类名 + 站名",等于没写。
百度虽然官方说 keywords 权重很低,但它仍然是页面主题的一个信号。特别是新站,搜索引擎没有其他数据,全靠页面自己的描述来判断。
我改成按篇定制:
| 文章 | 原来的 keywords | 改后的 |
|---|---|---|
| Docker 全家桶 | Docker,陌笑技术分享 | Docker全家桶,Mac mini服务器,Docker Compose,家庭服务器搭建 |
| Alist 挂网盘 | 网盘,陌笑技术分享 | Alist教程,网盘聚合,百度网盘挂载,自建网盘 |
| 备案流程 | 备案,陌笑技术分享 | 个人备案流程,ICP备案,域名备案,备案多久 |
原则是:主关键词 + 两三个长尾词 + 场景词,别堆砌,别重复。
五、还顺手修的 description
原来 description 是模板里的一句固定文案,每篇都一样。
现在改成取文章正文的前 140 个字,去掉 markdown 符号,压成一段。
这样每篇文章的摘要都是独一无二的,搜索结果里显示的也是真实内容。
六、修完之后的动作
改完配置,还要让搜索引擎重新抓:
- 重新提交 sitemap(百度站长平台 → 数据提交 → sitemap)
- 主动推送新的 URL(每天 10 条配额,我用了 9 条推新文章)
- 在站长平台点"抓取诊断",看百度蜘蛛能不能正常访问
- 检查 robots.txt 有没有挡住不该挡的
robots.txt 我确认过没写错:
User-agent: *
Allow: /
Sitemap: https://www.moxiaoa.com/sitemap.xml
七、还有几个不该做但很多人做的事
别买"快速收录"服务。 那些所谓包收录的,多数是给你提交到一些垃圾目录站,短期看着有量,长期是负分。
别一天发二十篇。 新站内容突然暴增,容易触发质量审核,反而压收录速度。我是一天一两篇。
别反复改标题。 一篇文章发出去,标题改来改去,搜索引擎会重新评估,之前的权重白攒。
别把时间都花在改配置上。 配置改对一次就够了,剩下的是等。
八、现在的状态
修完到现在过了几天,站长平台的索引量开始动了,从 1 涨到了 7。
不快,但在涨。
我的预期是三个月内把 32 篇收录完整,六个月看关键词排名。SEO 这事没有捷径,尤其是新站,前期就是熬。
下一篇写百度主动推送的具体用法——每天 10 条配额,怎么用才不浪费。
如果你也在折腾这套服务,碰到卡住的地方,可以加我微信 lige0552 聊聊。白天要上班,消息回得慢,看到都会回。