Google 只爬首页,从不爬文章页

Search Console 显示首页天天被爬,但 /articles/* 几乎不被抓——为什么?

Search Console → 抓取统计信息显示 Googlebot 每天访问你首页几十次,但 /articles/* 路径加起来都没几次。新文章发布后几周内根本不被抓取。Sitemap 早提交了也没用。

两种本质原因:Google 从首页找不到文章 URL(发现失败),或者它故意不在文章页上花预算(分配失败)。修法不一样。

症状

  • Crawl Stats 显示首页每日命中,但文章页很少被命中
  • 新文章 2-4 周才被发现(远超正常的 3-7 天)
  • Sitemap 已提交但 Google 很少抓里面的 URL
  • 文章页 URL Inspection 大多是 “Discovered” 或 “URL unknown to Google”

快速结论

要么 Google 从首页找不到文章 URL,要么它故意不在这些 URL 上花预算。两种都能修,但对应的修法不同。先用 Step 1 判断是哪种。

常见原因

1. 首页用 JS 渲染文章链接,Google 看不到

最常见。首页”最新文章”列表是 React/Vue/Svelte 在 hydration 后挂上去的。

如何判断

# 不执行 JS 看首页
curl -sL https://yourdomain.com/ > home.html

# 数文章链接
grep -oE 'href="/articles/[^"]+"' home.html | wc -l
# 0 或很少 = 链接靠 JS 渲染

2. 首页只展示最新 5-10 篇,老文章 3+ 次点击才到

首页(5 篇最新)→ /blog(分页 page 1)→ /blog/page/2 → 文章

老文章 3+ 次点击 = Google 把它当低优先级。

3. Sitemap 里没有文章 URL,或 sitemap 太大没法解析

# 看 sitemap 里有多少文章
curl -s https://yourdomain.com/sitemap.xml | grep -c "<loc>"

# 应该和你站文章数一致

如果 sitemap 是手动维护的,新文章可能根本没进。或者 sitemap 文件 > 50MB / > 50000 URL,Google 解析不动。

4. 文章页内容太薄,Google 来过一次就降优先级

如果 Googlebot 第一次抓到的文章都是 < 300 字 / 模板化内容,它会标”这类页面不值得回访”,整个 /articles/* 路径降优先级。

5. 内链锚文本太通用(“read more”)

<a href="/articles/foo/">read more</a>
<a href="/articles/bar/">查看全文</a>

通用锚文本对 Google 而言是”弱发现信号”。它知道有链接,但不知道指向的内容是什么主题。

6. 文章页 URL 在 robots.txt 被屏蔽

Disallow: /articles/draft/

如果你不小心写宽了规则(比如 Disallow: /a),可能误屏蔽 /articles/

7. 服务器对 Googlebot 慢 / 5xx

如果 server 对 Googlebot 响应慢(> 3 秒)或经常 5xx,Google 会主动降低抓取速率。

如何判断:Crawl Stats → 抓取响应 → “平均响应时间”。> 1000ms 是问题。

最短修复路径

Step 1:先判断是发现失败还是分配失败

# 关 JS 看首页源码
curl -sL https://yourdomain.com/ | grep -c "/articles/"
  • 0 或 < 5:发现失败,走 Step 2-3
  • 正常数量:分配失败,走 Step 4-6

Step 2:把列表组件换成 SSR / SSG

如果用 Next.js:

// 错:useEffect 后 fetch
function LatestPosts() {
  const [posts, setPosts] = useState([]);
  useEffect(() => { fetch('/api/posts').then(r => r.json()).then(setPosts); }, []);
  return posts.map(p => <a href={p.url}>{p.title}</a>);
}

// 对:getStaticProps
export async function getStaticProps() {
  const posts = await getAllPosts();
  return { props: { posts } };
}

Astro 默认是 SSG。React-only 站可以加 pre-render(用 react-snap 等)。

Step 3:加一个分页的 /articles 总索引

---
// src/pages/articles/index.astro
import { getCollection } from 'astro:content';
const posts = await getCollection('posts');
const sorted = posts.sort((a, b) => b.data.publishedAt - a.data.publishedAt);
---
<h1>全部文章 ({sorted.length})</h1>
<ul>
  {sorted.map(p => (
    <li>
      <a href={`/articles/${p.slug}/`}>{p.data.title}</a>
      <span>{p.data.publishedAt.toLocaleDateString()}</span>
    </li>
  ))}
</ul>

首页和主导航都链到 /articles/。这样任何文章 ≤ 2 次点击可达。

Step 4:Sitemap 修正

确保每篇文章 URL 都有真实 lastmod

<url>
  <loc>https://yourdomain.com/articles/foo/</loc>
  <lastmod>2026-05-21</lastmod>
</url>

lastmod 必须是真实修改时间,不要全填今天(Google 会忽略)。

如果 sitemap > 5000 URL,拆成 sitemap-index:

<!-- sitemap-index.xml -->
<sitemapindex>
  <sitemap><loc>https://yourdomain.com/sitemap-articles.xml</loc></sitemap>
  <sitemap><loc>https://yourdomain.com/sitemap-pages.xml</loc></sitemap>
</sitemapindex>

Step 5:审最近 10 篇新文章的质量基线

每篇必须:

  • <h1> 一个
  • 导语段(80 字以上)
  • 正文 600+ 字
  • 至少 2 处来自其他文章的内链
  • 至少 1 张图 + alt 描述

低于这条线的文章先补再发,否则只会拖累 /articles/* 全路径的抓取优先级。

Step 6:把内链锚文本改成包含话题关键词

<!-- 差 -->
<a href="/articles/foo/">read more</a>

<!-- 好 -->
<a href="/articles/foo/">Astro 部署 Vercel 完整指南</a>

锚文本里有话题词 → Google 把它当强发现信号。

Step 7:修服务器对 Googlebot 的响应

# 模拟 Googlebot 测速度
curl -sL -A "Mozilla/5.0 (compatible; Googlebot/2.1)" \
  -w "%{time_total}\n" -o /dev/null https://yourdomain.com/articles/foo/

# 应该 < 1.5s

慢 → 加 CDN、加缓存、优化 server-rendered 时间。

哪些情况可能不是你操作错了

大站点 Google 主动限速每个目录的抓取率。这不是站点坏了,而是 Google 决定了能花多少预算。修复 = 推外链 + 提升整体权威,让 Google 愿意分更多预算。

容易误判的情况

  • Sitemap 里设 <priority> 没用:Google 几乎完全忽略
  • 反复重交 sitemap 没用:Google 早知道 sitemap 内容,问题不在发现
  • 往首页堆关键词没用:堆词反而触发 spam 信号
  • 以为 Ping sitemap 能加速:Google 2023 起废弃了 sitemap ping 接口

预防建议

  • 重要页面绝不只靠 JS 渲染链接,永远 SSR / SSG 输出 <a href>
  • 保证每篇文章 ≤2 次点击可达(首页 → /articles 索引 → 文章)
  • 内链按 topic cluster 组织,每个 hub 页面集中链接相关文章
  • 内链锚文本永远是话题词,不要 “more” / “read”
  • 监控 Crawl Stats → 抓取响应时间,> 1000ms 立刻优化

FAQ

Q:Ping sitemap 能帮忙吗? A:帮助很小,且 Google 2023 起废弃了官方 ping endpoint。最大信号是”这个 URL 能不能从站内权威页直接到达”。

Q:HTML sitemap 换成 JSON 有用吗? A:没用,sitemap 格式不是瓶颈。

Q:用 Cloudflare 缓存能改善 Googlebot 响应时间吗? A:能,特别是文章页静态化后缓存命中能让响应时间从 800ms 降到 50ms。

相关阅读

标签: #SEO #Google #Search Console #收录 #排查 #抓取预算