搜索全站
Google SEO 10 分钟阅读

「已抓取,尚未编入索引」的成因与解决:内容、重复与技术的逐项排查

GSC 里出现大量「已抓取,当前未编入索引」,说明 Google 看过了但认为不值得收录。本文从内容质量、重复度、技术信号三个方向给出逐项排查方法,包含可直接跑的稀薄内容检测脚本。

U
UFO_PF 2021-05-17 · 阅读 10 分钟
「已 GOOGLE SEO
阅读提示
本文约 3,645 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:抓过了,就是不给收录

这是最让人窝火的一类状态:URL 检查工具里显示「抓取成功」,页面 HTML 完整、状态码 200,但索引状态一栏写着“已抓取,当前未编入索引”。你提交重新索引、等两周、再提交,状态纹丝不动。

“抓过了但不要”和“没抓到”是两件完全不同的事。后者是抓取路径或配额问题(对应「已发现,尚未编入索引」,见 已发现尚未编入索引的处理),前者是质量判定结果——Google 已经拿到内容并做出了“不值得进索引”的判断。所以解决方向也不在提交索引上,而在内容本身与页面携带的信号上。

原理分析:Google 为什么抓了却不收录

Google 的索引是有成本的:存储、更新、服务都要资源。因此对每一个页面都会做一个划算与否的评估。触发“不收录”判断的常见原因有四类:

一是内容稀薄(thin content)。 正文信息量过低、只有几行字、或者内容由模板生成、大量页面共享同一段正文。自动生成的聚合页、只有一句描述的分类页、以及“XX 怎么样”这类模板化页面是重灾区。

二是高度重复。 站内存在大量内容近乎一致的页面(参数组合、城市页换地名、产品页换型号),Google 会索引其中一个,其余标记为重复而排除。注意:这时报告里也可能显示「替代网页」而不是「已抓取未索引」,两者经常同时出现。

三是质量信号缺失。 没有作者、没有更新时间、没有内部链接指向、没有外部引用、页面停留时间极短——这些不构成直接的“不收录”原因,但会累积成低质量判断。

四是技术信号矛盾。 页面返回 200 但正文靠 JS 渲染(抓取到的快照是空的)、canonical 指向不存在的页面、noindex 被误加在某个模板里、移动端与桌面端内容差异过大。

排查方向 验证方法 判定标准
内容稀薄 统计正文字数与独有段落 正文低于 300 字且无独有内容
内容重复 与站内其他页面做相似度比对 相似度 > 80% 且无差异化信息
JS 渲染 看 URL 检查工具里的抓取页面 HTML 快照里没有正文
canonical 矛盾 查看页面源码 canonical 目标 目标页 404 或不在索引中
误加 noindex 搜索源码中的 robots meta 模板里存在无条件的 noindex
内链缺失 统计指向该页的内部链接数 内链数为 0

保姆级实操

步骤 1:用 URL 检查工具看“抓取到的页面”。 在 GSC 顶部搜索框输入问题 URL,进入后点「查看抓取到的页面 → 更多详情」,对照三个标签页:HTTP 响应(状态码、IP)、HTML(快照源码)、网页可用性和截图(渲染结果)。如果 HTML 快照里没有正文,先解决渲染问题。

步骤 2:确认没有误加 noindex 或 canonical 矛盾。 直接看源码里 <meta name="robots"> 与 <link rel="canonical"> 的值。WordPress 站点常见的是 SEO 插件在某个模板(比如归档页)默认输出了 noindex。

步骤 3:批量筛出稀薄内容。 与其凭感觉挑,不如让脚本把正文字数过低的页面全部列出来:

<?php
// WordPress 稀薄内容检测:列出正文字数低于阈值的已发布文章
require_once( '/path/to/wp-load.php' );

$query = new WP_Query( [
    'post_type'      => [ 'post', 'page' ],
    'post_status'    => 'publish',
    'posts_per_page' => -1,
    'fields'         => 'ids',
] );

$threshold = 300; // 中文正文字符数阈值
$thin      = [];

foreach ( $query->posts as $post_id ) {
    $raw    = get_post_field( 'post_content', $post_id );
    $text   = trim( wp_strip_all_tags( strip_shortcodes( $raw ) ) );
    $length = mb_strlen( preg_replace( '/\s+/u', '', $text ), 'UTF-8' );

    $internal_links = 0;
    if ( preg_match_all( '/<a\s[^>]*href=["\']https?:\/\/[^"\']*example\.com[^"\']*["\']/i', $raw, $m ) ) {
        $internal_links = count( $m[0] );
    }

    if ( $length < $threshold || 0 === $internal_links ) {
        $thin[] = [
            'id'      => $post_id,
            'title'   => get_the_title( $post_id ),
            'length'  => $length,
            'inlinks' => $internal_links,
            'url'     => get_permalink( $post_id ),
        ];
    }
}

usort( $thin, fn( $a, $b ) => $a['length'] <=> $b['length'] );
foreach ( $thin as $row ) {
    printf( "%6d 字 | 内链:%2d | %s | %s\n",
        $row['length'], $row['inlinks'], $row['title'], $row['url'] );
}
printf( "\n合计 %d 个页面需要复核\n", count( $thin ) );

步骤 4:对稀薄页面做三选一处置。 有补充价值的就补充(加真实数据、案例、步骤、截图说明);能被其他页面覆盖的就 301 到覆盖它的页面;既没价值也不该存在的,返回 404 或 410。不要留着不动,留着只会持续拉低整站质量评估。

步骤 5:给保留的页面补差异化信息与内链。 补上作者、更新时间、数据来源、以及相关页面的内部链接。对城市页、型号页这类模板页,务必加入真实差异(本地价格、库存、具体参数),只换地名必死。

步骤 6:重新提交并观察。 用 URL 检查工具点「请求编入索引」,然后在索引报告的对应分组里点「验证修复」。注意:大规模提交无效,Google 不会因为提交次数多就改变质量判断。

常见踩坑

  1. 反复点「请求编入索引」。 提交不改变质量判定,只会浪费配额。
  2. 只补字数不补信息。 把 300 字扩到 1500 字但全是同义改写,判定不会变。
  3. 给分类页、标签页写一大段通用介绍。 这仍然是与所有同类页面重复的模板内容。
  4. 认为改了 canonical 就能立刻收录。 canonical 只做归一,不提升质量。
  5. 忽略移动端差异。 移动优先索引下,移动端正文缺失等于页面缺失。
  6. 用 iframe 或懒加载藏正文。 抓取快照里没有,就等于没有。
  7. 案例: 一个 SaaS 站有 240 个“XX vs YY”对比页,全部由模板生成:换两个产品名,正文三段通用描述。GSC 里 210 个页面长期处于「已抓取,当前未编入索引」。后来团队只保留 18 个真实有对比数据的页面(含功能对照表、价格对比、迁移成本),其余 222 个 301 到对应的产品页。两个月后,那 18 个页面全部进入索引,其中 6 个拿到了精选摘要。模板化规模生产在 Google 这里是负资产。

总结

遇到「已抓取,尚未编入索引」,第一步永远是看 URL 检查工具里的抓取快照——先排除渲染与 noindex/canonical 的技术问题;第二步用脚本筛出稀薄内容并按模式归类;第三步对每个页面做「补充 / 归并 / 下线」三选一。判断标准:如果这个页面消失了,用户会不会失去一个独特答案?不会,那它就不该存在于索引里。把这个标准套到每一批被排除的页面上,决策会快很多。

U
UFO_PF作者

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

留下你的想法

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