site:域名 只搜到首页?
六个隐形原因。
site: 命令只出一条结果,说明你的站要么没被抓,要么被抓了不让收,要么收了但不认。这三种的修法完全不同,这篇一条条对着查。
在谷歌里搜 site:你的域名,只出来首页一条,或者出来三五个还是同一批页面。这不代表站做错了,代表谷歌抓到了、但没打算收,或者根本没抓进来。六种原因,症状都是「搜不到」,修法完全不同。
site: 出来的那个数字,到底是什么?
很多人把 site: 的结果数当成「被收录的页面数」,这是个常见误解。它给的是一个估算的抽样,不是精确清单:同一个查询今天和明天可能差很多,翻到第三页就没了。
所以它是用来做定性判断的,不是定量统计。判断标准只有三档:
- 只出首页一条:整个站基本没进索引,问题在入口层。
- 出来一批但都是同类页:抓是抓了,但只收了某一种页面,问题在页面层。
- 出来的数量跟你的页数对得上:收录没问题,那问题在别处(关键词、内容质量、竞争)。
要精确数字,别看 site:,去 Search Console 的「网页」报告。它会明确告诉你:已编入索引多少、已发现但尚未编入索引多少、被 noindex 排除多少。这个报告比 site: 有用十倍,因为它会告诉你原因。
原因一:robots.txt 挡住了整站
最粗暴也最常见。开发环境为了防止被收录,在 robots.txt 里写了一行 Disallow: /,上线时忘了删。表现是 site: 几乎不出东西,Search Console 里也没有抓取记录。
检查方法:直接访问 https://你的域名/robots.txt,看有没有 Disallow: /。注意判断它的作用范围——写在 User-agent: * 下面才是全站,写在某个具体爬虫下面是只针对那一家。
一个容易忽略的细节:robots.txt 是区分大小写的路径。如果有人把文件名写成了 Robots.txt,在某些服务器上(尤其 Linux 静态托管)会 404,爬虫读不到规则,行为就退回到「默认全抓」——这次不是被挡,而是规则压根没生效。
原因二:noindex 残留
和上面相反:能抓,但明确说了「别收」。多语言站、A/B 测试页、测试域名切换后的残留,都容易留下这个标签。技术说明很直接:
“noindex is a rule set with either a <meta> tag or HTTP response header and is used to prevent indexing content by search engines that support the noindex rule, such as Google.” “Important: For the noindex rule to be effective, the page or resource must not be blocked by a robots.txt file, and it has to be otherwise accessible to the crawler.”
注意第二句这个前提条件:noindex 要生效,页面必须没有被 robots.txt 挡住。所以「robots 挡住 + noindex 兜底」这个看起来最保险的组合,其实是有问题的——挡住之后爬虫读不到 noindex,被挡的页面如果以前收过,会一直留在索引里显示旧内容。
Google 搜索中心 · 用 noindex 阻止索引
检查方法两处都要看:一是页面 head 里的 <meta name="robots">,二是响应头里的 X-Robots-Tag。后者是服务器加的,在页面源码里看不见,很多人只查了 meta 就以为没事。
顺带说一个反直觉的点:如果页面已经被收录、现在想让它消失,正确顺序是先去掉 noindex 让它能被抓、再让它读到 noindex,而不是反过来。挡住就永远读不到那条指令。
原因三:JS 渲染出来是空白
如果页面内容是靠 JavaScript 从接口拉回来再渲染的,搜索引擎第一次抓到的 HTML 里可能什么都没有。谷歌有渲染能力,但渲染是排队进行的,不是立刻——一个资源多、脚本重的页面,可能几周才被渲染一次,渲染失败就一直是空白入库。
判断方法很土但有效:浏览器里关掉 JavaScript,刷新页面,看还剩多少内容。如果你自己看到的是空白或者一堆骨架屏,爬虫大概率看到的一样。
修法不是「加个预渲染插件」这么简单。真正省事的做法是让主内容本来就在 HTML 里——产品参数、公司信息、文章正文,这些最该被收录的东西,不该依赖脚本才能出现。
原因四:sitemap 没提交,或者提交了全是错的
sitemap 不是收录的保证,但它是最省事的告知方式。没有它,谷歌只能靠外链和站内链接慢慢爬。一个新站没有外链,爬虫找到你的速度可能以周计。
提交之后还要看状态。Search Console 的 sitemap 报告会区分「成功」和「有错误」:成功是指文件能被读取,不代表里面的 URL 都被收录。常见错误包括:文件里写了不存在的页面、URL 写成了 http 而站点已经全站 https、以及 sitemap 里的地址和页面 canonical 指向的地址不一致。
还有一条容易被忘:sitemap 里的地址必须是最终地址,不能是会发生 301 的地址。如果 sitemap 写的是 /service.html、而实际访问会跳到 /service/,谷歌会在报告里标成「网页会自动重定向」,这类的处理优先级很低。
原因五:内链断了,爬虫走不进去
爬虫靠链接发现页面。如果一个页面只能从站外某个链接进来、站内没有任何入口,那它就是个孤岛页。孤岛页不是不收录,是很难被持续重抓——内容更新了也没人知道。
外贸站最常见的孤岛:产品页只挂在筛选结果里、文章只出现在博客第一页、旧的活动页从导航撤下来但还留着。检查方法很简单:随便挑五个页面,问自己「从我首页出发,点几下能到」。超过三次点击的,基本算半孤岛。
还有个更隐性的问题:链接是 JS 触发的。onclick="location.href=..." 这种写法,用户能点,爬虫看不到。链接必须是真正的 <a href>。
原因六:整站被当成同一页的不同参数
如果你的 URL 里带一堆参数(?utm_source=、?page_id=、?lang=),谷歌可能把它们都归到同一个页面,只收一个代表。表现就是 site: 出来的数量远小于实际页数。
修法是把 URL 结构收敛成目录式:/products/pump-a/,而不是 /product.php?id=123。已经上线的站改结构要配 301,这一点在迁移那篇里讲得更细。
一张表,按症状对原因
| 你看到的 | 先查哪 | 怎么确认 |
|---|---|---|
| site: 几乎不出东西 | robots.txt | 访问 /robots.txt,找 Disallow: / |
| 能搜到但内容是旧的 | noindex + 缓存 | 查 meta 和 X-Robots-Tag,再请求重新抓取 |
| 页面打开是空白 | JS 渲染 | 关掉 JS 刷新,看还剩什么 |
| GSC 显示「已发现但未编入」 | sitemap + 内链 | 看 sitemap 状态,抽查孤岛页 |
| 数量远小于页数 | URL 参数 | 看 URL 里有没有 ?id= ?lang= |
| 只收了某一类页 | 模板层 | 对比被收和没被收的页面 head 差异 |
修完之后,怎么让它快点生效?
改动不会自动生效。顺序是:改完 → 在 Search Console 里对几个关键页面用「网址检查」请求编入索引 → 重新提交 sitemap → 等三到七天再搜一次 site:。
「请求编入索引」有配额,一天别刷几十个页面。挑最有价值的五个,产品主页和核心文章页优先。
如果站点规模不大、改动又多,可以走 IndexNow 这条快路——Bing、Yandex、Seznam、Naver 共用这个接口,改完主动推一次,通常几小时就能看到重抓。谷歌不吃这套,只能等。
为什么托管站不太会碰上这事?
静态站的收录问题少一半,原因不神秘:每个 URL 就是一个真实存在的文件,不会出现「路由匹配失败返回 200 空白页」这种软 404;html 里本来就是完整内容,不依赖脚本渲染;sitemap 和 canonical 都是从同一份配置生成的,不会自相矛盾。
要说也不能全免:robots 写错、noindex 忘删、内链没做,这些人为问题照样会发生。区别在于出问题时排查路径短——文件摆在那儿,看一眼就知道是哪一个环节。
搜不到自己的站?把域名发我,我查三处:robots、noindex、sitemap。三分钟能给你结论。
资料来源
- Google 搜索中心 · site: 搜索运算符(结果为估算值,非精确清单)
- Google 搜索中心 · 用 noindex 阻止索引(与 robots.txt 的生效前提)
- Google 搜索中心 · robots.txt 简介
- Google 搜索中心 · JavaScript SEO 基础
- Google 搜索中心 · 构建并提交 sitemap