html语义标签是爬虫解析内容的核心依据:必须唯一使用且不嵌套于等区域,须唯一并与一致,与不可互换,所有语义容器需包裹真实可索引内容,否则触发降权或忽略。

爬虫不看样式,也不渲染页面,它只信任HTML标签的语义嵌套关系——是锚点,
,否则整块内容可能被跳过。
为什么多个 <main></main> 或嵌套在 <header></header> 里会直接降权
Google 移动优先索引(2023 年起 100% 启用)默认跳过 <header></header>、<nav></nav>、<footer></footer>,只从 <main></main> 提取首屏文本、链接和标题层级。这不是“偏好”,是硬性规则。
- 多个
<main></main>→ 触发“结构冲突”警告,爬虫无法判断哪块是真实主体,整页内容可信度下降 -
<main></main>嵌套在<header></header>或<section></section>内 → 被忽略,等同于缺失<main></main> -
<main></main>里塞登录框、客服电话、友情链接 → 判定为“元信息污染”,主内容权重打折 - SPA 页面只留
<main><div id="root"></div></main>且无服务端渲染内容 → 爬虫拿到空容器,等同于无主内容
<h1></h1> 必须唯一且与 <title></title> 语义自洽,否则标记“结构混乱”
爬虫用 <h1></h1> 定位页面唯一主主题,不是打分,而是建模意图。CMS 模板未清理、Header 组件复用、SSR 渲染遗漏,都容易导致 DOM 中出现两个 <h1></h1>:一个在页头(如「前端笔记」),一个在正文(如「React Server Components 原理」)。
- Google 不会合并或平均多个
<h1></h1>的文本,而是判定页面意图模糊,触发 E-E-A-T 评估降级 -
<title></title>和<h1></h1>内容不一致 → 优先采信<title></title>,但记录“标题与主体脱节”,影响点击率与质量评分 - 禁止用
display: none隐藏冗余<h1></h1>,属于明确的隐藏文本风险 - Next.js/Nuxt 中避免写死
<h1>{{ title }}</h1>,确保 SSR 输出时title已赋值
<section></section> 和 <article></article> 语义不可互换,错用等于放弃独立索引机会
<article></article> 表示可独立分发、复用、被单独索引的内容单元(如一篇博客、一条新闻);<section></section> 只是主题相关区块,必须配 <h2></h2> 或 aria-labelledby,否则爬虫视为空白语义块。
- 纯
<section><p></p></section>是结构缺失信号,不会进入索引库 -
<section></section>内部跳级(如<h1></h1>后直接跟<h4></h4>)→ 爬虫中断层级推断,后续段落归为“无主题区块” - 博客列表页中,
<main></main>应包裹整个列表,每篇用独立<article></article>封装,而非全塞进一个<section></section> -
<figure>+<figcaption></figcaption></figure>是图片 SEO 的开关:装饰性图片设alt="",有意义图片必须用<figure></figure>包裹并写清用途
语义标签必须包裹真实可索引内容,否则等于贴假标签
所有语义容器(<main></main>、<article></article>、<section></section>)若仅含 JS 渲染的空白 <div>,爬虫拿到的是空容器,结构信号彻底失效。
<ul>
<li>检查方式:用 <code>curl -s URL | grep '<main>'</main> 或 Lighthouse 验证生成 HTML 是否含有效内容
<div> 嵌套且无语义标签中断)会触发截断,<code><h2></h2> 以下内容可能不被解析
<header></header> 必须含至少一个标题级元素(<h1></h1>–<h6></h6>),否则部分爬虫忽略其语义<footer></footer> 不该塞导航链接,否则干扰主内容权重分配最容易被忽略的点:语义标签不是装饰,是机器可读的契约。你给它什么内容,爬虫就信什么——塞空容器、混用标签、跳级标题,都是在主动交出结构控制权。











