<main>必须唯一且直属于<body>,因Google移动优先索引(2023年起100%启用)直接定位首个合法<main>抓取首屏内容,错放或重复将导致爬虫误判主内容、降权或空抓取。

main 标签必须唯一且直属于 body
Google 移动优先索引从 2023 年起已 100% 启用,它不解析整个 DOM,而是直接定位第一个合法 <main> 开始抓取首屏文本、链接和标题层级。错放或重复就等于告诉爬虫“主内容不可信”。
-
<main>必须是<body>的直接子元素,不能嵌套在<header>、<footer>或任意<div>内 - 页面中
document.querySelectorAll('main')返回长度必须为 1,且不能为空(SPA 中 SSR 输出需含真实内容) - 常见错误:CMS 模板复用导致页头也带
<main>;Next.js 页面中<main>被 JS 动态插入但未触发重抓取 - 验证方式:用
curl -s URL | grep '<main>'查看源码是否含有效标签;DevTools 中运行上述 JS 检查数量
section 必须带语义锚点,否则不参与建模
<section> 不是视觉分块工具,而是爬虫识别“可独立建模内容单元”的信号。纯容器式使用(比如只包一个 <p>)会被忽略,整块内容失去主题权重。
- 每个
<section>必须以<h2>–<h6>起始,或带aria-labelledby指向有效标题元素 - 新闻列表页应为每条新闻单独包裹
<section>,而非整个列表套一个 —— 否则爬虫误判为“一篇长文” - 商品详情页中,参数表、用户评价、相关推荐等区块若各自独立可分发,才适用
<section>;广告位、客服入口等辅助信息请用<div>或<aside> - 注意:
<article>表示可独立分发、RSS 抓取的内容(如博客正文),<section>是逻辑子模块,二者不可混用
h1 必须唯一、精准、且位于 main 内部
爬虫把 <h1> 当作页面核心主题信号,但它只在合理语义上下文中生效。塞进 <footer> 或 <header> 会被判定为关键词堆砌,直接触发降权。
-
<h1>必须唯一,且必须出现在<main>内部(可嵌套在<main><header><h1>中) - 文本需与
<title>逻辑自洽:产品页用 “USB-C 多功能扩展坞”,不能写 “欢迎光临我的小站” - 禁止用
display: none隐藏冗余<h1>—— 这是明确的隐藏文本风险行为 - 标题层级必须连续:从
<h1>到<h2>到<h3>,跳级(如<h1>直接到<h4>)会破坏结构解析,辅助技术可能跳过该层级
time 和 img 的机器可读属性不能省略
“2024年3月15日”对爬虫只是普通字符串,<time datetime="2024-03-15"> 才是它能直接提取并用于时效性排序的结构化数据;同理,<img> 缺 alt 不是体验问题,是内容缺失。
立即学习“前端免费学习笔记(深入)”;
-
<time>的datetime属性必须符合 ISO 8601 格式(如2024-03-15T14:30),否则 Google 新闻类页面不提升时效权重 - 所有
<img>必须有alt:信息图需描述文字内容,装饰图可用alt="",但“下载 PDF”按钮里的图标不能空 - 动态生成图片时,JS 插入的
<img>必须同步补全alt,否则 Lighthouse “Accessibility” 审计失败 - 避免用 CSS 改变视觉大小来“伪装”标题层级,
<h2>就是<h2>,别为了样式降级成<div class="h2">
重构不是换标签游戏,而是重新校准内容与机器之间的契约。最常被忽略的点是:爬虫不看你写了多少语义标签,而看你有没有破坏它们的嵌套逻辑和使用前提 —— 一个错位的 <main>,比十个没用的 <div> 更伤权重。



















