我把一个站的 SEO 从头修了一遍,发现真正影响收录的,不是文章写得好不好,是这四样东西有没有配对。
它们各管一件事:
| 项目 | 管什么 |
|---|---|
| TDK | 告诉搜索引擎"这页讲什么" |
| canonical | 告诉搜索引擎"哪个地址才是正版" |
| sitemap | 告诉搜索引擎"我有哪些页面" |
| JSON-LD | 告诉搜索引擎"这是什么类型的内容" |
任何一样错位,前面几样就白做。
这篇把四样讲透,附可直接抄的代码。
一、TDK:最老也最基础
TDK 是 Title、Description、Keywords。
Title 标题
<title>为什么我花半个月折腾 E5-2696V3:老服务器 U 不能当主力机 | 陌笑技术分享</title>
规则:
- 长度 30-40 个中文字符,超过会被截断
- 主关键词放前面,品牌名放后面
- 每页唯一,别全站一个标题
- 别堆关键词("服务器|服务器推荐|服务器配置"这种必被降权)
Description 描述
<meta name="description" content="折腾 10 天 E5-2696V3 的完整记录:从 BIOS 掉盘、降压补丁到 64G 内存跑 AI 仍 OOM 的真实原因,以及为什么老服务器不适合当日常主力机。">
规则:
- 80-120 个中文字符,搜索结果里显示前 60-80 个
- 概括文章核心,不是重复标题
- 每篇不同
我之前所有文章共用一句模板描述,等于没写。现在改成取正文前 140 字,去掉 markdown 符号。
Keywords 关键词
<meta name="keywords" content="E5-2696V3,E5洋垃圾,老服务器,X99主板,服务器功耗">
规则:
- 3-6 个,逗号分隔
- 主词 + 长尾词 + 场景词
- 每篇定制,别全站同一个
百度官方说 keywords 权重很低,但它仍然是页面主题信号之一。新站尤其要写。
二、canonical:解决"同一份内容多个地址"
这个是最容易出大事的。
一个页面可能有多个地址:
http://example.com/post/1(http)https://example.com/post/1(https)https://www.example.com/post/1(带 www)https://example.com/post/1?from=zhihu(带参数)
对搜索引擎来说,这是四个页面,内容一样。结果就是权重分散,谁也不收录。
canonical 就是告诉它"这四个里,只有第三个是正版":
<link rel="canonical" href="https://www.example.com/post/1">
关键是一致性:
- canonical 写的地址
- sitemap 里的地址
- 主动推送的地址
- 页面实际可访问的地址
这四个必须是同一个。
我之前的坑就在这儿:canonical 写不带 www,sitemap 和推送用带 www。百度就懵了。
修完统一之后,索引量才开始动。
顺便:其他版本要 301
光写 canonical 不够,最好把其他版本 301 到正版:
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate ...;
return 301 https://www.example.com$request_uri;
}
canonical 是"建议",301 是"强制"。两个都做,搜索引擎才没有歧义。
三、sitemap:一份页面清单
sitemap.xml 放在站点根目录,列出所有页面和最后修改时间:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.example.com/</loc>
<lastmod>2026-11-04</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://www.example.com/post/47-xin-zhan.html</loc>
<lastmod>2026-11-03</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
规则:
<loc>必须是完整 URL,带域名,和 canonical 一致<lastmod>是真的更新时间,别全站写当前时间(搜索引擎会认为你在作弊)<changefreq>和<priority>百度基本不看,可以不写- 单个 sitemap 最多 5 万条 URL,超了要拆成 sitemap index
配套 robots.txt 指向它:
User-agent: *
Allow: /
Sitemap: https://www.example.com/sitemap.xml
sitemap 常见错误:
- 列了不存在的页面(404)
- 列了 noindex 的页面
- lastmod 全是今天
- 域名和 canonical 不一致
四、JSON-LD:结构化数据
前面三样是"基础信息",JSON-LD 是"语义增强"——告诉搜索引擎这是一篇文章、一个教程、还是一个问答。
文章页的标准写法:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "为什么我花半个月折腾 E5-2696V3",
"description": "折腾 10 天的完整记录,包括 BIOS 掉盘、降压补丁和内存溢出。",
"image": "https://www.example.com/assets/01-cover.jpg",
"datePublished": "2026-10-15T08:00:00+08:00",
"dateModified": "2026-10-18T10:00:00+08:00",
"author": {
"@type": "Person",
"name": "陌笑技术分享",
"url": "https://www.example.com"
},
"publisher": {
"@type": "Organization",
"name": "陌笑技术分享"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.example.com/post/01-e5.html"
}
}
</script>
必填的三项:headline、datePublished、author。
有 image 的话,在某些搜索场景会显示缩略图。
验证方法:
- 打开 Google 的 Rich Results Test(需要梯子)
- 国内可以用百度搜索资源平台的"结构化数据"工具
- 或者自己跑一遍解析:
import json, re
html = open('page.html').read()
m = re.search(r'<script type="application/ld\+json">(.*?)</script>', html, re.S)
obj = json.loads(m.group(1))
print(obj['headline'])
最容易出错的地方:中文引号。
标题里有《》或者"",直接拼进 JSON 就会坏。必须用 json.dumps 生成,别手拼字符串。
这个我单独写了一篇,因为它让我整个结构化数据白做了半个月。
五、四件套的一致性检查表
上线前对着这张表过一遍:
| 检查项 | 要求 |
|---|---|
| 每页 Title 唯一 | 是 |
| 每页 Description 唯一,概括内容 | 是 |
| Keywords 按篇定制 | 是 |
| canonical 每页唯一且是完整 URL | 是 |
| canonical 与 sitemap 地址一致 | 是 |
| canonical 与主动推送地址一致 | 是 |
| 非正版地址 301 到正版 | 是 |
| sitemap 只列真实存在的页面 | 是 |
| sitemap lastmod 是真实更新时间 | 是 |
| robots.txt 指向 sitemap | 是 |
| JSON-LD 能通过 json.loads | 是 |
| JSON-LD 的 URL 与 canonical 一致 | 是 |
十二项全过,地基才算稳。
六、四个之外还有一件事
配置是地基,内容是房子。
我见过配置做得完美、内容全是采集的站,一样不收。
反过来说,配置有瑕疵但内容扎实的站,早晚会被收,只是慢一点。
所以这四件套的作用是"不拖后腿",不是"送上门"。
最后
我把这套东西修完,最直观的变化是:百度站长平台的索引量从 1 开始动了。
不快,但在涨。
下一篇讲 JSON-LD 那个坑——一个中文引号怎么让结构化数据全废,以及我是怎么查出来的。
如果你也在折腾这套东西,碰到卡住的地方,可以加我微信 lige0552 聊聊。白天要上班,消息回得慢,看到都会回。