本文约 4,098 字,预计阅读 11 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:进了 News 索引,却从没上过轮播
不少站点的文章能在 Google News 里搜到,但始终进不了搜索结果顶部的 Top Stories 轮播位。原因是两者门槛不同:进 News 索引靠资质与站点地图,进 Top Stories 还要额外满足结构化数据与体验要求。这两者的差距体现在流量上非常明显——同一篇文章,出现在轮播位和只在 News 列表里,点击量可以差一个数量级。
原理分析:Top Stories 的三道门槛
Top Stories 的入选条件可以拆成内容、标记、体验三层:
| 层级 | 要求 | 是否硬性 |
|---|---|---|
| 内容层 | 时效性强的报道,已被 News 索引 | 是 |
| 标记层 | NewsArticle/Article 结构化数据完整 | 强建议,实际几乎必需 |
| 体验层 | 速度快、Core Web Vitals 达标、移动适配 | 是 |
关于 AMP,需要纠正一个过时认知:Google 已经取消了 Top Stories 必须使用 AMP 的限制,非 AMP 页面同样可以进入轮播位。现在比拼的是页面体验本身,也就是 Core Web Vitals 里的 LCP、INP、CLS 三项。
结构化数据方面,Google 对 Article 类标记有明确的必填与建议字段。headline 是必填,且官方建议不超过 110 个字符;datePublished 与 dateModified 必填,格式需为 ISO 8601;author 需要是 Person 类型且带 name;publisher 需要是 Organization 且带 logo(ImageObject)。图片方面建议提供多种宽高比的高分辨率图,至少 1200px 宽。
保姆级实操
步骤一:确认文章类型的标记基线
先用 Rich Results Test 或 Schema.org 校验器跑一遍现有文章,看 Article 标记缺哪些字段,不要凭感觉补。
步骤二:在主题里输出 NewsArticle 结构化数据
下面这段挂在 wp_head,对 post 类型输出,图片取特色图的三种尺寸:
add_action( 'wp_head', 'mmf_news_article_schema' );
function mmf_news_article_schema() {
if ( ! is_singular( 'post' ) ) {
return;
}
$id = get_the_ID();
$logo = get_theme_mod( 'mmf_publisher_logo', 'https://mimangfei.com/logo-600x60.png' );
$imgs = array();
foreach ( array( 'mmf-discover', 'large', 'medium' ) as $sz ) {
$src = wp_get_attachment_image_src( get_post_thumbnail_id( $id ), $sz );
if ( $src ) {
$imgs[] = $src[0];
}
}
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'NewsArticle',
'headline' => mb_substr( wp_strip_all_tags( get_the_title( $id ) ), 0, 110 ),
'datePublished' => get_post_time( 'c', true, $id ),
'dateModified' => get_post_modified_time( 'c', true, $id ),
'mainEntityOfPage' => array(
'@type' => 'WebPage',
'@id' => get_permalink( $id ),
),
'author' => array(
'@type' => 'Person',
'name' => get_the_author_meta( 'display_name', get_post_field( 'post_author', $id ) ),
'url' => get_author_posts_url( get_post_field( 'post_author', $id ) ),
),
'publisher' => array(
'@type' => 'Organization',
'name' => get_bloginfo( 'name' ),
'logo' => array(
'@type' => 'ImageObject',
'url' => $logo,
'width' => 600,
'height' => 60,
),
),
'image' => $imgs,
);
echo '<script type="application/ld+json">' . wp_json_encode( $schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES ) . '</script>' . "\n";
}
步骤三:控制 headline 长度
headline 超过 110 字符虽不会直接报错,但展示时会被截断,且 Google 文档明确给出该建议值。可以在编辑文章时用 mb_substr 截断,或直接在写作阶段控制标题长度。
步骤四:确认 robots 不阻止
结构化数据写得再好,页面被 noindex 或 robots.txt 屏蔽也是白搭:
curl -sI https://mimangfei.com/news/sample/ | grep -i "x-robots-tag"
curl -s https://mimangfei.com/news/sample/ | grep -i '<meta name="robots"'
步骤五:做体验侧的达标检查
用 PageSpeed Insights 跑移动端,重点看 LCP 是否小于 2.5s、INP 是否小于 200ms、CLS 是否小于 0.1。新闻页的 LCP 元素通常就是首图,优先给它 fetchpriority="high" 并去掉懒加载:
<img src="/cover-1200.jpg" width="1200" height="675"
fetchpriority="high" decoding="async" alt="新闻封面图">
步骤六:用两个工具交叉验证
Rich Results Test 看标记是否被识别;Search Console 的「增强」类报告(新闻)看实际展示与错误。两者口径不同,前者是即时检测,后者是历史统计。
常见踩坑
dateModified写成了主题模板的当前时间,每篇文章的修改时间都一样。author用字符串而不是 Person 对象,导致标记不完整。publisher.logo尺寸写成 16×16,Google 要求图片可被抓取且比例合理。- 首图加了
loading="lazy",LCP 被推后,移动端分数难看。 - 结构化数据由插件输出,主题又输出了一份,页面里出现两个冲突的 Article 标记。
- 案例:某科技媒体改版后 Top Stories 曝光归零,排查发现是新主题的
functions.php里有一段调试代码给文章页加了noindex,只影响single模板。因为首页和列表页正常,问题拖了五周才发现。 - 以为做了 AMP 就一定能进轮播,实际上 AMP 早已不是必要条件,而站点的 CLS 长期在 0.25 以上。
总结
Top Stories 的达标判断可以简化成三句话:内容进了 News 索引、NewsArticle 标记字段齐全且 headline 不超 110 字符、移动端 Core Web Vitals 三项达标。AMP 不再是门槛,速度才是。落地时先补标记、再查 robots、最后优化首图 LCP,顺序不要颠倒。标记层面的工作完成后,可以配合 Google News 收录申请 一起推进收录;如果内容同时有资格进入信息流,Google Discover 流量获取 的图片要求也一并满足,两者能共用同一套大图与标记改造。
