搜索引擎严格依赖html语义标签嵌套与dom位置定位主要内容;缺失、错置、过深嵌套(超6层)或与document.title不一致,均导致正文不被索引,ssr/ssg中首屏未含有效结构将失效。

搜索引擎不是靠“猜”来定位主要内容,而是严格依赖 HTML 结构中的语义标签嵌套关系和 DOM 位置信号。结构错乱时,<main></main>缺失、<h1></h1>塞在<footer></footer>里、或关键文本藏在 7 层 <div> 深处,内容大概率不被当作主体索引。
<h3>为什么 <code><main></main> 缺失会让正文“消失”
爬虫把 <main></main> 当作内容主干的唯一锚点。没它,就等于没交出“这篇稿子到底讲啥”的明确声明。
- 漏掉
<main></main>:搜索引擎被迫从一堆<div> 中推测主体,常误判广告区或侧边栏为正文 <li>重复出现 <code><main></main>:触发结构混乱标记,整页权重下调 - 把推荐位、相关文章、页脚链接塞进
<main></main>:稀释核心内容密度,降低该区块的语义可信度 - SSR/SSG 项目中,检查
document.body.innerHTML首屏完成时是否已含<main></main>—— JS 动态注入的<main></main>晚于 500ms,基本无效 -
<h1></h1>在<header></header>里但父级是<div class="site-header">:没问题,只要 <code><header></header>是<main></main>的兄弟或祖先 -
<h1></h1>在<footer></footer>或<aside></aside>里:爬虫判定“标题与上下文脱节”,降权甚至忽略整块区域 -
<h1></h1>和document.title语义不一致(如标题写“技术博客”,<h1></h1>写“联系我们”):Google 采信<title></title>,但标记“结构混乱”,长期拖累相关性得分 - Lighthouse 会明确报 “
<h1> count</h1>” 和 “<h1> matches <title></title> </h1>” 失败 - 正确做法:用
<main><section><article></article></section></main>替代<div class="wrap"><div class="inner"><div class="content">... <li>检查方式:用 DevTools Elements 面板手动数层级——从 <code>开始,到目标段落的直接父节点,≤6 层才算安全 - SPA 项目尤其危险:服务端未输出语义结构,全靠 JS 补,首屏 DOM 深度极易超标
-
<article></article>:必须能脱离当前页面单独存在并被理解(如一篇博客、一条新闻、一个商品详情) -
<section></section>:同一主题下的逻辑分块,不能脱离上下文(如“参数说明”“返回值”“示例代码”) - 把整篇博客塞进
<section></section>而非<article></article>:爬虫无法识别这是独立内容,影响聚合展示(如 Google News) - 把广告位放进
<nav></nav>:被识别为干扰性导航,连带降权整个导航区域
<h1></h1> 放错位置直接削弱标题权重
<h1></h1> 不是“视觉最大字号”,而是页面意图的最强信号。它的 DOM 父级决定了它“属于谁”。
DOM 深度超 6 层,<h2></h2> 及其后文本大概率不进索引
这不是理论限制,是爬虫实际资源截断行为。当纯 <div> 嵌套过深且无语义标签中断时,解析器会在某一层主动终止。
<ul><li>实测现象:嵌套 7 层 <code><div>,第 6 层以下的 <code><h2></h2>、<p></p> 文本不被收录,哪怕视觉完全可见
<section></section> 和 <article></article> 混用会干扰内容独立性判断
这两个标签不是“换着用更高级”,爬虫靠它们区分“可复用模块”和“独立发布单元”。用错等于发错信号。
真正难的不是写对标签,而是在 CMS 模板、组件化框架、动态 SSR 渲染中,让语义结构在所有渲染路径下保持一致 —— 尤其是 <h1></h1> 和 <main></main> 的位置,一旦错位,补救成本远高于预防。











