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

站内链接层级过深怎么治:三层可达原则与 WordPress 扁平化改造

百度蜘蛛抓不到深埋在第五层的文章,多半不是内容问题,是结构问题。本文讲清三层可达原则的判断方法,给出用 get_ancestors 计算分类层级、自动生成相关文章内链、压缩分类深度的完整代码与改造步骤。

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

引言:写了三百篇,有一百篇从没被抓过

内容没问题、标题没问题、站点也验证过了,但有一批文章就是迟迟不收录。这时候该看的是结构:这些文章是不是藏在”首页 → 分类 → 子分类 → 子子分类 → 文章”这样的第五层。爬虫的抓取资源有限,离首页越远的页面被发现的优先级越低,层级过深是内容型站点最常见也最容易被忽略的收录瓶颈。

原理分析:层级深度如何影响抓取优先级

距首页点击层数 抓取优先级 常见表现
1 层(导航直达) 最高 收录快、更新及时
2 层(栏目页) 高 正常收录
3 层(栏目子页) 中 收录延迟,更新慢
4 层及以上 低 长期不收录或快照老旧
仅靠分页可达 极低 靠分页翻到第 8 页才能点到的文章基本被放弃

所谓三层可达,是指任意一篇内容从首页出发,不超过三次点击就能到达。这条规则不是硬性规定,但它反映了一个事实:每多一层,页面的链接权重传递就衰减一次,被抓取的概率也下降一次。

两个常见加深层级的结构:一是分类树过深,WordPress 支持无限层级的分类,站长很容易建出四层分类;二是只靠分页翻页进入老文章,一篇两年前的文章要翻 20 页才能点到,实际上等于不可达。

保姆级实操

步骤 1:先量出真实的层级分布。 用 get_ancestors() 计算每个分类的深度,再统计每个深度下有多少文章:

// 审计脚本:统计分类层级深度与对应文章数
$report = array();
$cats   = get_categories( array( 'hide_empty' => 0 ) );
foreach ( $cats as $cat ) {
    $depth = count( get_ancestors( $cat->term_id, 'category', 'taxonomy' ) ) + 1;
    $report[ $depth ] = ( $report[ $depth ] ?? 0 ) + (int) $cat->count;
}
ksort( $report );
foreach ( $report as $depth => $count ) {
    printf( "第 %d 层分类:文章 %d 篇\n", $depth, $count );
}

步骤 2:压缩分类层级到两级。 三层及以上的分类,能合并的合并,不能合并的改成标签。判断标准:一个分类下长期不足 10 篇文章,就不该是独立分类,改成标签更合适。合并时注意用 301 把旧分类地址指向新地址。

步骤 3:让每篇文章都能被最近的内容反链。 只靠分类列表不够——新文章会不断把老文章往下挤。给每篇文章自动挂上同标签的相关文章:

// functions.php:按共同标签生成相关内容内链(挂到正文末尾)
add_filter( 'the_content', function ( $content ) {
    if ( ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() ) {
        return $content;
    }
    $post_id = get_the_ID();
    $terms   = wp_get_object_terms( $post_id, 'post_tag', array( 'fields' => 'ids' ) );
    if ( empty( $terms ) || is_wp_error( $terms ) ) {
        return $content;
    }

    $related = new WP_Query( array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => 6,
        'post__not_in'   => array( $post_id ),
        'no_found_rows'  => true,
        'tax_query'      => array(
            array(
                'taxonomy' => 'post_tag',
                'field'    => 'term_id',
                'terms'    => $terms,
            ),
        ),
    ) );

    if ( ! $related->have_posts() ) {
        return $content;
    }

    $html = '<div class="related-posts"><h2>相关阅读</h2><ul>';
    while ( $related->have_posts() ) {
        $related->the_post();
        $html .= sprintf(
            '<li><a href="%s">%s</a></li>',
            esc_url( get_permalink() ),
            esc_html( get_the_title() )
        );
    }
    wp_reset_postdata();
    $html .= '</ul></div>';

    return $content . $html;
}, 20 );

步骤 4:建专题聚合页。 同一主题下的 10–20 篇文章,手工做一个聚合页,用列表把它们串起来,并在导航或首页给出入口。聚合页是解决”老文章不可达”最有效的手段,比改分页高效得多。

步骤 5:控制分页深度。 分类列表每页数量建议 20–30 条,不要设成 5 条。同时给分页页面加 rel="next"/rel="prev" 的思路已经失效,现在更实际的做法是给第 2 页之后的分页页设置 noindex,把抓取资源留给内容页。

步骤 6:补面包屑。 面包屑既帮用户定位,也提供层级信号。用主题的面包屑功能或 SEO 插件的面包屑模块(配置见 WordPress 面包屑导航设置),确保层级不超过三级。

步骤 7:复查。 改造完成两周后,再跑一次步骤 1 的脚本,确认第 3 层以下的文章数降到合理范围,然后对比收录量的变化。

常见踩坑

  1. 只加相关文章插件,不改分类层级,深层文章仍然要靠分类页进入。
  2. 相关文章插件按”最新文章”生成,等于没有语义关联。
  3. 合并分类时没做 301,旧分类地址全部 404。
  4. 相关文章输出到 the_content 但没有 in_the_loop() 判断,导致摘要、RSS、REST 输出里都带上。
  5. 分页每页 5 条,200 篇文章需要 40 页,等于后 35 页不可达。
  6. 案例: 某 WordPress 教程站分类做到第四层,且分类列表每页只显示 8 条。统计发现约 38% 的文章需要 4 次以上点击才能到达,这批文章的收录率只有 31%。压缩到两级分类、每页 24 条、新增 12 个专题聚合页后,两个月内这批文章的收录率升到 74%。
  7. 面包屑显示的层级与实际 URL 结构不一致,反而制造混乱。
  8. 只做结构改造不做主动推送,百度重新发现深层页面仍需时间,应配合 API 推送。

总结

判断标准很直接:随机挑 20 篇老文章,看从首页出发几次点击能到达,超过三次就该改。改造优先级为:压缩分类层级 → 增大分页容量 → 建专题聚合页 → 加语义相关内链 → 补面包屑。结构改完后记得主动推送,否则百度发现这些页面仍需时间。sitemap 侧的配合做法见 WordPress 站点地图提交。

U
UFO_PF作者

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

留下你的想法

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