搜索全站
建站 12 分钟阅读

博客归档页与标签体系设计:让老文章持续被发现的完整方案

写了几百篇文章,八成流量只来自最近十篇?本文讲清归档页、分类页与标签页各自承担的职责,给出按年分组归档的查询代码、标签数量控制标准,以及用内链让老内容持续获得曝光的落地做法。

U
UFO_PF 2025-06-09 · 阅读 12 分钟
博客 建站
阅读提示
本文约 4,583 字,预计阅读 12 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:两百篇文章,一百九十篇从没被访问过

从 Google Analytics 里拉一个”所有页面”报表,按浏览量排序,多数博客会发现一个残酷的事实:排名前 10 的页面贡献了 80% 以上的流量,剩下的几百篇文章一个月访问量不到 10 次。这些文章不是写得不好,而是发布之后就”沉底”了——首页只显示最新 10 篇,翻过几页就再没人点进去,站内没有任何入口指向它们。

归档页和标签体系就是为了解决”内容沉底”。归档页解决”按时间找到”,标签页解决”按主题找到”,内链解决”从热门内容导向冷门内容”。三者配合起来,老文章才有机会被重新发现。很多博主只重视发布环节,把归档页交给主题默认样式——一个纯文本链接列表,既没有描述也没有文章数,读者和搜索引擎都不会认真对待。

原理分析:三类列表页的分工与收录策略

WordPress 默认提供三种列表:日期归档(is_date())、分类归档(is_category())、标签归档(is_tag())。它们的本质都是 WP_Query 的一次查询加一个模板文件,但在 SEO 上定位完全不同:日期归档的搜索需求极低,通常不需要被索引;分类归档是栏目主页,必须精心维护;标签归档是主题聚合页,只有积累了足够多的文章才值得被索引。

页面类型 是否索引 维护重点 典型问题
分类归档 是 描述文案、置顶文章 描述为空导致模板化
标签归档 ≥3 篇才索引 标签命名统一 同义词标签泛滥
日期归档 否 保持可访问即可 被大量索引造成重复
作者归档 单作者站建议否 与关于页重复 与关于页内容雷同

判断一个标签页是否值得索引,可以用这条规则:文章数 ≥3 且标签名在站内没有同义词孪生兄弟。不满足就 noindex,把抓取预算留给真正有价值的页面。

保姆级实操

步骤 1:做一个”按年分组”的时间归档页。 建一个自定义页面模板,循环按年份输出文章标题与日期,比默认的月度链接列表更像”内容地图”。

<?php
/**
 * Template Name: 年度归档
 */
get_header();

$years = $wpdb->get_col(
    "SELECT DISTINCT YEAR(post_date) FROM {$wpdb->posts}
     WHERE post_status = 'publish' AND post_type = 'post'
     ORDER BY post_date DESC"
);

foreach ( $years as $year ) :
    $posts = get_posts( array(
        'post_type'      => 'post',
        'posts_per_page' => -1,
        'year'           => (int) $year,
        'orderby'        => 'date',
        'order'          => 'DESC',
    ) );
    ?>
    <section class="archive-year">
        <h2><?php echo esc_html( $year ); ?> 年(<?php echo count( $posts ); ?> 篇)</h2>
        <ul>
        <?php foreach ( $posts as $p ) : ?>
            <li>
                <time><?php echo esc_html( get_the_date( 'm-d', $p ) ); ?></time>
                <a href="<?php echo esc_url( get_permalink( $p ) ); ?>">
                    <?php echo esc_html( get_the_title( $p ) ); ?>
                </a>
            </li>
        <?php endforeach; ?>
        </ul>
    </section>
    <?php
endforeach;

get_footer();

步骤 2:给低价值归档页加 noindex。 用 wp_robots 过滤器,WordPress 5.7 之后推荐这种写法,避免和 robots.txt 冲突。

add_filter( 'wp_robots', 'mimangfei_archive_noindex' );
function mimangfei_archive_noindex( $robots ) {
    if ( is_date() || is_author() ) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }
    if ( is_tag() ) {
        $term = get_queried_object();
        if ( $term && $term->count < 3 ) {
            $robots['noindex'] = true;
        }
    }
    return $robots;
}

步骤 3:用 wp_get_archives() 输出侧边栏月度归档。 内置函数不用自己写查询,show_post_count 能显示每月篇数。

wp_get_archives( array(
    'type'            => 'monthly',
    'limit'           => 12,
    'format'          => 'html',
    'show_post_count' => true,
    'echo'            => true,
) );

步骤 4:清理无价值的标签。 先查出只用过一次或零次的标签,再批量删除。

SELECT t.term_id, t.name, tt.count
FROM wp_terms t
JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'post_tag' AND tt.count < 2
ORDER BY tt.count ASC;
# 确认列表后删除(把 123 换成实际 term_id)
wp term delete post_tag 123

步骤 5:在文章底部自动输出”相关文章”。 优先按标签匹配,标签不足时回退到同分类最新文章,保证每篇文章底部都有出口。

function mimangfei_related_posts( $post_id, $limit = 5 ) {
    $tags = wp_get_post_tags( $post_id, array( 'fields' => 'ids' ) );
    $args = array(
        'post__not_in'   => array( $post_id ),
        'posts_per_page' => $limit,
        'orderby'        => 'rand',
    );
    if ( $tags ) {
        $args['tag__in'] = $tags;
    }
    $related = get_posts( $args );
    if ( count( $related ) < $limit ) {
        $fallback = get_posts( array(
            'category__in'   => wp_get_post_categories( $post_id ),
            'post__not_in'   => array( $post_id ),
            'posts_per_page' => $limit - count( $related ),
        ) );
        $related = array_merge( $related, $fallback );
    }
    return $related;
}

步骤 6:在热门文章里手动补老文章链接。 每月挑 3 篇流量最高的文章,在正文中自然插入 2–3 条指向旧文的链接。这是提升老内容曝光最直接的方式。

常见踩坑

  • 标签随手建,出现”WordPress””wordpress””WP”三个同义标签。
  • 日期归档页被大量索引,浪费抓取预算。
  • 相关文章插件按点击量排序,结果全站底部都显示同样 5 篇。
  • wp_get_archives() 缓存不更新,新文章不出现在归档里(可配合缓存插件清除)。
  • 直接在模板里写 query_posts(),导致分页失效。
  • 案例:某技术博客 400 篇文章,站长把每篇文章的关键词都建成标签,最终 900 多个标签里 700 多个只对应 1 篇文章。Search Console 里”已抓取但未索引”堆积上千条。清理标签、给低频标签加 noindex 并合并同义词后,有效索引页面数反而上升了,因为抓取预算被释放到了正文页。
  • 归档分页标题全是”归档 – 站点名”,重复标题成百上千。
  • 删除标签后没清理 term_relationships 残留数据,导致统计不准。

总结

归档体系是否健康,用两个指标判断:老文章(发布超过 6 个月)的月访问量占比是否超过 30%,以及 noindex 页面数是否远高于索引页面数。行动清单:① 分类页必须填描述;② 标签少于 3 篇就 noindex;③ 日期与作者归档统一 noindex;④ 每季度清理低频标签;⑤ 每篇文章底部有相关推荐;⑥ 每月给热门文章补老内容内链。延伸阅读 博客 RSS 与邮件订阅、WordPress 站点地图优化 与 博客文章排版规范。

U
UFO_PF作者

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

留下你的想法

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