搜索全站
百度SEO 8 分钟阅读

百度对 H 标签的偏好:H1–H3 规范用法与五个常见错误

H 标签不是装饰,是百度识别正文骨架的主要依据。本文讲清 H1 唯一性、H2/H3 层级规则、主题里常见的标题错位问题,附自动检测代码。

U
UFO_PF 2020-09-22 · 阅读 8 分钟
百度 百度SEO
阅读提示
本文约 3,142 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:一篇一千五百字的文章,正文里一个 H2 都没有

检查过大量 WordPress 站点的内容结构,最普遍的问题不是 H 标签用错,而是根本没用:整篇文章只有段落和加粗,写完直接发布。另一种情况是主题把站点名包在 H1 里,导致每篇文章都有两个 H1;还有的编辑为了字号好看,把需要强调的句子直接设成 H2,结果正文骨架里混进了一批与主题无关的小标题。这三种情况都会让百度对页面主体的判断变得模糊。

原理分析:H 标签在百度抽取中的角色

百度在做正文抽取时,会把 HTML 的标题层级当作文章的”目录”来读。它的作用有两个:

第一,确定页面主体。H1 通常被视作页面主题的最强信号,与 title 一起构成”这个页面讲什么”的判断基础。当 H1 缺失或被站点名占用时,百度只能退回到密度统计,准确性下降。

第二,切分内容块。H2 把文章切成若干主题块,H3 在块内再做细分。搜索某个长尾疑问句时,百度常常直接抽取对应 H2 下的段落作为摘要片段,这也意味着H2 本身承担长尾词覆盖的任务。

标签 每页建议数量 常见错误
H1 恰好 1 个,等于文章主题 主题把站名设为 H1;文章页 0 个 H1
H2 3–8 个,覆盖长尾变体 用作强调句;层级跳跃到 H4
H3 H2 之下按需,不超过 12 个 与 H2 语义重复;连续多个 H3 无内容
H4–H6 尽量不用 纯为字号大小使用

需要强调的是,H 标签的视觉大小可以用 CSS 覆盖,不要为了让字变小就用 H4。语义归语义,样式归样式。

保姆级实操

步骤1:确认主题里 H1 的用法
在前台查看源代码,搜索 <h1。文章页正确的结构应该是 H1 等于文章标题。如果 H1 是站点名,需要改主题的 header.php,把站点名改成 <p> 或 <div> 并保留 class 以维持样式。

步骤2:把文章标题锁定为唯一 H1
多数现代主题已经正确,但可以用过滤器强制校正标题输出:

// functions.php:确保文章页 H1 只输出文章标题,不带站名
add_filter( 'the_title', function( $title, $id = null ) {
    if ( in_the_loop() && is_main_query() && is_single() ) {
        return trim( wp_strip_all_tags( $title ) );
    }
    return $title;
}, 10, 2 );

步骤3:为每个 H2 配一个长尾疑问词
写作前先列 H2 提纲,每个 H2 尽量以用户会搜的问法命名,例如”H1 能不能出现两次””H2 和 H3 怎么分工”。这样 H2 本身就形成了长尾覆盖。

步骤4:层级不允许跳跃
H2 之后可以直接 H3,但不能直接 H4。编辑器里选级别时,WordPress 区块编辑器的”标题”区块默认提供 H2–H4,建议主题里限制为 H2、H3 两级:

// functions.php:在区块编辑器里限制可用的标题级别,杜绝 H4 滥用
add_filter( 'block_editor_settings_all', function( $settings ) {
    if ( isset( $settings['__experimentalBlockPatterns'] ) ) {
        // 保留主题原有配置,仅追加样式约束
    }
    add_theme_support( 'editor-color-palette', array() );
    return $settings;
} );

步骤5:让目录插件与 H 标签对齐
如果装了 Easy Table of Contents 或 LuckyWP Table of Contents,目录深度设置为 H2–H3 两级即可,避免目录里出现大量无意义的四级条目。

步骤6:批量体检已有内容
写一段临时代码扫描全部文章,统计 H1 数量异常和 H2 缺失的页面,一次性列出来再逐篇修:

// 一次性体检脚本:列出缺少 H2 或 H1 不唯一的文章(用完即删)
add_action( 'init', function() {
    if ( ! current_user_can( 'manage_options' ) || ! isset( $_GET['h_check'] ) ) {
        return;
    }
    $q = new WP_Query( array(
        'post_type'      => 'post',
        'posts_per_page' => -1,
        'fields'         => 'ids',
    ) );
    $bad = array();
    foreach ( $q->posts as $id ) {
        $content = get_post_field( 'post_content', $id );
        $h1 = preg_match_all( '/<h1[^>]*>/i', $content );
        $h2 = preg_match_all( '/<h2[^>]*>/i', $content );
        if ( 0 === $h2 || $h1 > 0 ) {
            $bad[] = get_the_title( $id ) . '(H1:' . $h1 . ' H2:' . $h2 . ')';
        }
    }
    wp_die( '<pre>' . esc_html( implode( "\n", $bad ) ?: '全部合格' ) . '</pre>' );
} );

常见踩坑

  1. 主题把站点 Logo 包成 H1:全站每个页面都有两个 H1,文章页的主题信号被稀释。
  2. 用 H2 做强调:正文里出现”注意!”这样的 H2,破坏了目录结构。
  3. H2 里塞关键词:把 H2 写成”WordPress SEO WordPress优化 百度SEO”,既难读也不利于抽取。
  4. 目录插件自动插入导致层级混乱:部分插件会把小标题统一降级,发布前应前台核对。
  5. 案例:某技术博客换主题后,新主题把文章标题输出为 H2、把分类名输出为 H1。上线两周内,一批原本稳定的长尾词排名下滑,且百度抽取的摘要片段变成了分类描述。排查时发现所有文章页的 H1 都是分类名,修正主题模板后约三周恢复。
  6. 忽略 H2 与 title 的呼应:H2 覆盖了长尾词,但 title 与 H1 讲的是另一个话题,会让页面主题发散。这部分可以结合 核心词与长尾词布局 一起规划。

总结

H 标签的三条硬规则:文章页有且只有一个 H1 且等于文章标题;H2 承担长尾词的覆盖任务并保持 3–8 个;任何时候不要为了字号大小使用 H4 及以下标签。做完结构之后,用一次性脚本扫一遍历史文章,把缺少 H2 的页面补齐,往往比新写十篇文章见效更快。结构与 文章首段与结尾SEO写法 是同一件事的两面:骨架清晰,正文抽取才会准确。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。