独立站 SEO 存量体检:我在自己站点上挖出的 4 个真实问题
新站最容易犯的一个错,是以为「内容还没写多少,所以没什么可检查的」。
事实相反:站点结构问题基本都在内容之前就长出来了。我这次给自己站做了一轮存量体检,挖出 4 个问题,全都不影响「网站能不能打开」,但都会实实在在影响搜索引擎怎么理解它。
把它们写下来,是因为排查方法可以迁移到任何静态站。
问题一:39 条站内断链,全部来自「内容导航」
症状很隐蔽:导航菜单正常、首页正常、已发布的文章正常,但搜索控制台里开始出现爬取浪费的信号。
根因是提前把目录结构写成了链接。我在知识库的几个板块页里放了「内容导航」,列出该板块未来要写的子主题,并且每个子主题都做成了链接——但那些页面还没写出来。
结果是 39 条指向 404 的内部链接。这不是「页面打不开」的问题,而是站点在主动把爬虫引向死路。
修法(方案 A:只链接真实存在的页面):把未发布子主题从链接改为纯文本并标注「整理中」,已发布的保留链接。断链数 39 → 0。
可迁移的原则:导航里不要放占位链接。宁可少一个入口,也不要多一个 404。
问题二:hreflang 写了,但会被 Google 完全忽略
这是这次体检里最值得说的一条,因为表面上完全看不出来——页面 <head> 里确实有 hreflang 标签,写得像模像样。
hreflang 有两个硬性前提,缺一个整组就失效:
- 必须双向确认。A 页声明「我的法语版是 B」,B 页也必须声明「我的中文版是 A」。单向声明的 hreflang 会被直接丢弃。
- 语言码必须语义一致。A 页说「我的法语版在 B(隐含我是
zh)」,B 页却说「我的英语版在 A」——zh和en构不成对等关系,这一整对同样作废。
我的站点两个都踩了:语言码一侧写 zh、另一侧写成了 en;另有一篇文章声明了中文对端,但中文那页没有任何回指。
还有第三个坑:x-default 缺失。它用来告诉搜索引擎「没有匹配语言时该给用户看哪一版」,属于该有的兜底。
修法:先判断「两套内容是否真的对等」。我的中文侧有 37 个 URL,法语侧只有 3 个——这种量级差下,挂 hreflang 是在声明一件不成立的事,比不写更糟。所以我的选择是整组撤掉,等法语内容补齐到对等水平再启用。
判断标准:两套语言的页面覆盖量接近(我给自己定的线是 60%),且每对声明都能互相验证,才值得启用 hreflang。
问题三:sitemap 完全合规,站长工具却说「无法读取」
提交 sitemap 时收到「无法读取此站点地图」。第一反应是文件坏了,于是逐项验证:
- HTTP 状态
200 Content-Type: application/xml- 零重定向、无 BOM、XML 解析通过
- 37 条 URL 全部为绝对地址
文件没有任何问题。 后来才想清楚:提交的那一刻,站点正好在重新构建,sitemap 的 Last-Modified 在几分钟内变了一次——抓取器撞上这个窗口,就判成了「无法读取」。
可迁移的结论:
- 站长工具读 sitemap 是异步的,提交瞬间显示的多半是中间态,等 24–48 小时或手动点「测试」再看
- 别在站点刚构建完、文件还在变的窗口期提交
- 排查顺序永远是:先证明文件本身合规,再去怀疑平台
顺便一个常见误会:用浏览器打开 sitemap 看到的是没有样式的 XML 树,这是正常现象(未关联 XSL 样式表),不是报错。
问题四:页面标题被污染,还顺带污染了分析数据
同一个页面上有两套「标题」:
<title>:浏览器标签页和搜索结果里显示的og:title/twitter:title:分享到社交和聊天软件时显示的
我的模板里 <title> 读的是 seo_title,而 og:title 读的是 title。首页的 title 是「首页」——于是分享出去的卡片标题就是「首页」,几乎等于没有信息。
更隐蔽的是第三个受害点:我把页面标题一起推给了数据层给分析工具用,于是「首页」这个词也进了分析报表,让「哪些页面最受关注」这一类分析直接失真。
修法:标题只允许有一个权威取值,三个出口(<title>、og:title、数据层)全部读同一个字段。
可迁移的原则:页面元数据一旦有多个出口,就必须收敛到单一数据源。否则它一定会分叉,而且分叉的地方通常不会被 UI 检查发现。
附:一个高频误判
体检过程中我还纠正了自己一个认知错误——把 sitemap 里的 URL 条数,当成了「已收录的 URL 数」。
这两件事完全不同:
| 指标 | 含义 |
|---|---|
| sitemap 条数 | 我希望搜索引擎收录哪些页面 |
| 已收录数 | 搜索引擎实际收录了哪些页面 |
前者是你写的文件,后者只能去站长工具的「索引编制」报告里看。另外,站长工具的「属性验证通过」只证明域名归你所有,和有没有被收录没有因果关系。
可复用的自查清单
按顺序做,每一步都能独立验证:
- 内部链接:全站扫描,按「已存在路径集合」逐个比对,断链必须归零
- 禁止收录指令:源码查
noindex,响应头查X-Robots-Tag,确认没有误伤 - canonical:每个页面是否自指、是否与真实 URL 一致
- 多语言(仅当内容对等):双向确认 + 语言码一致 +
x-default兜底,三者缺一即撤 - 标题与元数据:
<title>、og:title、数据层是否读同一个字段
这套检查不需要任何付费工具,命令行加一个脚本就能跑完。
本文数据全部来自我对自己站点(chaorendan.top)的实测。凡是我没有验证过的结论,我会明确写「未验证」。