本文约 4,632 字,预计阅读 12 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:发了两百条公司动态,搜索结果里一条都找不到
一家做工业除尘设备的企业站,编辑岗位每周固定发三条”公司新闻”:参加了某某展会、领导视察车间、新增一台设备。两年下来后台累计两百多条,但站长用 site: 指令一查,收录的只有首页和几个产品页,新闻详情页一条没进索引。更糟的是新闻列表页的标题全是”新闻中心 – 公司名”,几十个页面标题完全一样,Google Search Console 里”重复标题标签”的提示堆积了几十条。
问题不在于内容质量,而在于栏目结构从一开始就选错了。很多人把新闻当成普通文章,直接扔进 category 分类目录,导致新闻、产品资讯、行业转载混在同一个 /category/news/ 下;URL 里带着 ?cat=5 之类的参数;列表页没有分页标题区分;再加上每篇正文只有一百来字配一张图,被搜索引擎判定为低质量聚合内容。企业站的新闻栏目既要承担”公司动态”的展示职责,又要兼顾 SEO 收录,两者必须通过 CPT 分离 + 收录配置同时解决。
原理分析:新闻和公告为什么要拆成独立文章类型
WordPress 的 post 是默认文章类型,category 和 post_tag 是挂在它上面的分类法。当新闻、产品、案例、招聘全部共用 post 时,会出现三个连锁问题:URL 无法区分内容类型、归档页模板无法定制、sitemap 无法按类型拆分。改用 register_post_type() 注册独立的 news 类型后,它拥有自己的归档页(/news/)、独立的 rewrite 规则和独立模板文件 archive-news.php、single-news.php。
| 维度 | 共用 post + category | 独立 CPT news |
|---|---|---|
| URL 结构 | /category/news/xxx 或与博客混用 |
/news/xxx,语义清晰 |
| 模板定制 | 只能用 category-news.php |
archive-news.php / single-news.php |
| sitemap | 与文章混在一份索引里,难以观察收录率 | 可单独拆出 news-sitemap.xml |
| 后台管理 | 与文章列表混排,编辑易发错位置 | 独立菜单,权限可单独控制 |
| 分类法 | 与博客共享标签,标签页重复 | 独立 news_cat 分类法,互不污染 |
新闻与公告虽然可以共用一个 CPT,但两者更新节奏差异很大:新闻是持续产出,公告是低频但要求置顶。因此实践中通常注册一个 news CPT,再挂一个 news_cat 分类法,分类里设”公司新闻 / 行业资讯 / 通知公告”三项,通过置顶字段让公告浮在列表顶部,避免为公告单独建一套系统带来的维护成本。
保姆级实操
步骤 1:注册新闻 CPT 与独立分类法。 代码放在子主题 functions.php 或自建功能插件里,不要写进父主题。
add_action( 'init', 'mimangfei_register_news_cpt' );
function mimangfei_register_news_cpt() {
$labels = array(
'name' => '新闻中心',
'singular_name' => '新闻',
'add_new_item' => '发布新闻',
'edit_item' => '编辑新闻',
'all_items' => '全部新闻',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'news', 'with_front' => false ),
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'revisions' ),
'show_in_rest' => true,
'menu_icon' => 'dashicons-megaphone',
);
register_post_type( 'news', $args );
register_taxonomy( 'news_cat', 'news', array(
'label' => '新闻分类',
'public' => true,
'hierarchical' => true,
'rewrite' => array( 'slug' => 'news-category', 'with_front' => false ),
'show_in_rest' => true,
) );
}
步骤 2:让公告置顶、列表分页标题不重复。 用 _news_top 自定义字段做加权排序,并给分页加上页码。
add_action( 'pre_get_posts', 'mimangfei_news_query' );
function mimangfei_news_query( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
if ( is_post_type_archive( 'news' ) || is_tax( 'news_cat' ) ) {
$query->set( 'posts_per_page', 12 );
$query->set( 'meta_key', '_news_top' );
$query->set( 'orderby', array( 'meta_value_num' => 'DESC', 'date' => 'DESC' ) );
}
}
add_filter( 'document_title_parts', 'mimangfei_news_paged_title' );
function mimangfei_news_paged_title( $parts ) {
$paged = get_query_var( 'paged' );
if ( $paged > 1 ) {
$parts['title'] .= ' 第 ' . $paged . ' 页';
}
return $parts;
}
步骤 3:把新闻单独拆一份 sitemap。 用 Rank Math 或 Yoast SEO 时,在”Sitemaps → 自定义文章类型”里勾选 news;手写的话用 init 注册 add_feed 或直接让 SEO 插件输出后用 wp_sitemaps_post_types 过滤器保留 news。
add_filter( 'wp_sitemaps_post_types', 'mimangfei_sitemap_keep_news' );
function mimangfei_sitemap_keep_news( $post_types ) {
unset( $post_types['attachment'] ); // 媒体页不进 sitemap
return $post_types;
}
步骤 4:配置自动 ping 与主动推送。 WordPress 自带的更新服务在”设置 → 撰写”里,企业站建议留空并改用搜索引擎的主动推送接口,避免大量无效 ping。
# 导出近 100 条已发布新闻的 URL 并主动推送(token 用环境变量传入,不要写进脚本)
wp post list --post_type=news --post_status=publish \
--field=url --posts_per_page=100 --path=/var/www/mimangfei > /tmp/news-urls.txt
curl -s -H 'Content-Type: text/plain' --data-binary @/tmp/news-urls.txt \
"http://data.zz.baidu.com/urls?site=https://mimangfei.com&token=${BAIDU_PUSH_TOKEN}"
步骤 5:设定可执行的更新频率。 企业站新闻不要追求日更,每周 2–3 条原创、每篇正文不少于 500 字,比每天 5 条百字水文有效得多。行业资讯类可放宽到转载,但必须带来源链接与自己的一段评述。
常见踩坑
- 注册完 CPT 后归档页 404,因为没执行”设置 → 固定链接 → 保存更改”刷新 rewrite 规则。
has_archive设为false却又建了archive-news.php,模板永远不生效。- 新闻与博客共用
post_tag,导致标签归档页里新闻和产品混排,被判定为内容堆砌。 - 列表页摘要调用
the_excerpt()但没填摘要字段,自动生成的内容被截断成半句话。 - 只在首页放新闻模块,从不给详情页做内链,详情页长期无入口导致不收录。
- 案例:某建材站把 300 条新闻全放在
category下,且每篇标题都以”热烈祝贺”开头。百度抓取后判为模板化内容,整个目录收录率不足 5%。改造为独立 CPT、重写标题、给每条新闻加 300 字以上正文并补上产品页内链后,三个月内收录率回升到 70%。 - 用
query_posts()改写新闻列表,破坏了主查询,分页直接失效(应使用pre_get_posts)。 - 开启整站缓存后新闻列表不更新,编辑以为发布失败。
总结
判断新闻栏目是否健康,看三个数:详情页收录率是否超过 60%、列表页标题是否唯一、每条新闻是否至少有一个来自其他页面的内链。行动清单:① 新闻用独立 CPT 而非 category;② 固定链接保存一次刷新规则;③ 公告用自定义字段置顶而非手动调日期;④ sitemap 按类型拆分便于观察;⑤ 更新频率以”每周 2–3 条原创”为基准;⑥ 每篇正文 500 字起。栏目结构想清楚了再回头看 企业站招聘栏目的实现方式、博客归档页与标签体系设计 与 WordPress 网站收录优化。
