站是 10 月初上线的,32 篇文章,一天发一两篇,sitemap 生成好了,robots.txt 也写了,百度站长平台验证过了,还提交了 sitemap。

一个月后,我在百度搜 site:moxiaoa.com。

结果:1 条。

就首页,一篇文章都没收录。

那几天我在金山出租屋里盯着这个结果看了很多遍,一度怀疑是不是自己站做得太烂。后来一项一项查,发现是三个实打实的配置问题,不是内容问题。

这篇把排查过程写完。

先说结论

问题影响
canonical 和推送 URL 不一致(有无 www)搜索引擎认不清哪个是主版本,不收录
JSON-LD 结构化数据被中文引号破坏结构化数据解析失败,等于没写
keywords 只输出分类名页面主题识别模糊,长尾词进不来

三个都不是"内容不行",是技术细节没对齐。

一、用 site: 查收录,本身就有坑

先说个前提:site: 这个查询在百度不太准。

我第一次查的时候,curl 直接请求百度搜索页,被 302 到验证码页。后来用浏览器带着登录态去查,才看到"找到相关结果数约 1 个"。

所以查收录别只看 site:,还要看:

我后来用文章标题去搜,32 篇一篇都搜不到,这才确定是真没收录。

二、原因一:canonical 写的是不带 www 的

这个问题最隐蔽。

我的站有两个访问地址:

服务器没做强制的 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 符号,压成一段。

这样每篇文章的摘要都是独一无二的,搜索结果里显示的也是真实内容。

六、修完之后的动作

改完配置,还要让搜索引擎重新抓:

  1. 重新提交 sitemap(百度站长平台 → 数据提交 → sitemap)
  2. 主动推送新的 URL(每天 10 条配额,我用了 9 条推新文章)
  3. 在站长平台点"抓取诊断",看百度蜘蛛能不能正常访问
  4. 检查 robots.txt 有没有挡住不该挡的

robots.txt 我确认过没写错:

User-agent: *
Allow: /
Sitemap: https://www.moxiaoa.com/sitemap.xml

七、还有几个不该做但很多人做的事

别买"快速收录"服务。 那些所谓包收录的,多数是给你提交到一些垃圾目录站,短期看着有量,长期是负分。

别一天发二十篇。 新站内容突然暴增,容易触发质量审核,反而压收录速度。我是一天一两篇。

别反复改标题。 一篇文章发出去,标题改来改去,搜索引擎会重新评估,之前的权重白攒。

别把时间都花在改配置上。 配置改对一次就够了,剩下的是等。

八、现在的状态

修完到现在过了几天,站长平台的索引量开始动了,从 1 涨到了 7。

不快,但在涨。

我的预期是三个月内把 32 篇收录完整,六个月看关键词排名。SEO 这事没有捷径,尤其是新站,前期就是熬。

下一篇写百度主动推送的具体用法——每天 10 条配额,怎么用才不浪费。

如果你也在折腾这套服务,碰到卡住的地方,可以加我微信 lige0552 聊聊。白天要上班,消息回得慢,看到都会回。