remove url from google:先分清是你的页面还是别人的,四种情况各用哪个工具、能管多久

remove url from google 其实是四件事。自己的页今天就要没:Removals 工具,一天内生效,管六个月左右。自己的页永久没:404 或 410、密码、或一条爬虫读得到的 noindex。别人的页:Refresh Outdated Content 表单。一张路由表、一段发请求前先跑的三十行自检(按 Google 的 robots.txt 优先级判路径)、六种悄悄失败的做法。

抓取与收录9 分钟读完1207 次阅读
remove url from google:先分清是你的页面还是别人的,四种情况各用哪个工具、能管多久

搜 remove url from google 的人,手里的情况只有四种,每种对应一个工具。自己站上的页面要今天就消失:Search Console 里的 Removals 工具,一天内生效,管六个月左右,之后把活儿交回给你的服务器。自己站上的页面要永久消失:404 或 410、加密码、或者一条爬虫读得到的 noindex。别人站上的页面:只有 Refresh Outdated Content 那张表单,而且要等内容真的没了才有用。robots.txt 不在这张单子上,它挡住的恰恰是 Google 需要看见的那个信号。

做之前先确认两件事

第一,这个网址得在你自己拥有的 Search Console 资源里,Removals 工具对别的一律拒绝。第二,你得改得动服务器对这个路径返回什么,至少改得动它的 <head>。独立站常见的三种起因都满足这两条:下架的产品页还在搜索结果里、测试用的集合页被收录了、旧域名的页面跟着新站一起被抓了。页面在别人站上的,直接跳到下面表格的第四行,你只有一个杠杆,而且它做不到多数人想的那件事。

为什么 Removals 工具单独用永远做不完

Google 把两件事分开:它展示什么,和它知道什么。Removals 工具改的是第一件。帮助页说得很直接:"Blocking a URL does not prevent Google from crawling your page, only from showing it in Search results"(Removals and SafeSearch reports tool,2026-09-12 读取)。同一页写着 "A successful request lasts only about six months",历史表里那条状态的原话是 "Temporarily removed: … You should make removal permanent or the page could appear again after about six months."

所以它是一块幕布,不是拆除。Google 知道的东西只在网址本身变了之后才变:开始返回 404 或 410,开始要密码,或者带上一条爬虫读得到的 noindex。最后这半句是大多数失败的移除栽跟头的地方。noindex 文档一句话讲完:"For the noindex rule to be effective, the page or resource must not be blocked by a robots.txt file … the crawler will never see the noindex rule, and the page can still appear in search results, for example if other pages link to it"(Block Search indexing with noindex,2026-09-12 读取)。

Removals 工具改的是 Google 展示什么。只有你的服务器能改 Google 知道什么。

remove url from google 的四种情况,各用哪个工具

先找到自己那一行。要看的三列是:多快生效、能管多久、去哪里确认它生效了。

情况工具生效管多久去哪确认
自己的页,今天就要没Removals → Temporarily remove URL一天内六个月左右Removals 历史表:Temporarily removed
自己的页,永久没404 / 410、密码,或 noindex下次抓取服务器一直这么说就一直有效URL Inspection,再看 page indexing report
页面留着,摘要要换Removals → Clear snippet in search一天内到下次收录为止Removals 历史表:Cleared
别人的页Refresh Outdated Content 表单审核后内容真没了就是永久站主那边的 Outdated content 标签页

前两行是配着用的。Google 自己把 Removals 工具定位成 "Use this feature as the first step in permanently blocking a page from Google Search results",永久的那一步是三选一:"Remove or update the content on your site … and make sure that your web server returns either a 404 (Not Found) or 410 (Gone) HTTP status code"、"Block access to the content, for example by requiring a password"、"Indicate that the page should not be indexed using the noindex meta tag. This is less secure than the other methods"(同一帮助页)。该返回哪个状态码、哪两种情况两个都不该用,站上另有一章:页面删掉之后该返回什么

按这个顺序做

顺序要紧,原因就是上面那句「不影响抓取」。先把页面藏起来、后改服务器,Google 可能在幕布拉上的这段时间里把旧页面重抓一遍并留着。帮助页给了正对这种情况的补救:"If you blocked the page before removing your content permanently (step 1), unblock and then reblock the page. This clears the page from the index, if it was recrawled after blocking."

  1. 先对准确的那个网址跑一遍下面的自检。看它打出的四行:状态码、X-Robots-Tag、meta robots、robots.txt 放不放 Googlebot 进来。最后一行写着 BLOCKS,这页上的 noindex 就是看不见的,要么删掉那条 robots.txt 规则,要么改用状态码。
  2. 把永久的改动上线:状态码、密码,或 noindex。PDF 和图片没有 <head>,只能用响应头这一种写法:X-Robots-Tag: noindex
  3. 打开 Search Console → Removals → Temporary Removals → New Request → Temporarily remove URL,也就是大家搜的「search console 移除网址」那个入口。单页选 "Remove this URL only",整个目录选 "Remove all URLs with this prefix"。两种都同时覆盖 www 和不带 www、http 和 https;两种都不覆盖别的子域名。提交后历史表里先是 "Processing request",生效了才变成 "Temporarily removed",中间这段时间不用重复提交,重复的会被拒。
  4. 用 URL Inspection 跑一次 live test。它显示的是 Googlebot 实际取到的 HTML,noindex 有没有被 Google 看见,只有这里能从 Google 那一侧确认。
  5. 一周后回来打开 page indexing report。这条网址应该挪到 "Excluded by noindex tag" 或 "Not found (404)" 下面。还在某个已收录的原因下,说明爬虫还没回来过;noindex 文档说得很不客气,"it may take months for Googlebot to revisit a page"。

交付物:发请求之前跑一遍的自检

三十行 Python,不装任何依赖。它用桌面浏览器的 UA 取页面,打出状态码和两种写法的 robots 规则,再读站点的 robots.txt,按 Google 的优先级判这条路径:"crawlers use the most specific rule based on the length of the rule path. In case of conflicting rules, including those with wildcards, Google uses the least restrictive rule"(How Google interprets the robots.txt specification,2026-09-12 读取)。最后一行是软 404 警告:一个标题里写着 not found 的 200,在 Google 眼里不算移除。

#!/usr/bin/env python3
"""Before you file a removal: what does this URL tell a crawler right now?
Usage: python3 removal_check.py https://example.com/page"""
import re, sys, urllib.error, urllib.request
from urllib.parse import urlsplit
url = sys.argv[1]
UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/126.0 Safari/537.36"

def get(u):
    try:
        r = urllib.request.urlopen(urllib.request.Request(u, headers={"User-Agent": UA}), timeout=20)
        return r.status, r.url, r.headers, r.read(300000).decode("utf-8", "replace")
    except urllib.error.HTTPError as e:
        return e.code, u, e.headers, e.read(300000).decode("utf-8", "replace")

def robots_verdict(txt, path, agent="googlebot"):
    """Google-style: pick the most specific matching group, longest rule wins, allow wins a tie."""
    groups, cur = {}, []
    for line in txt.splitlines():
        line = line.split("#")[0].strip()
        if not line or ":" not in line: continue
        k, v = [x.strip() for x in line.split(":", 1)]
        if k.lower() == "user-agent":
            cur = [v.lower()]; groups.setdefault(v.lower(), [])
        elif k.lower() in ("allow", "disallow") and cur:
            for g in cur: groups[g].append((k.lower(), v))
    rules = next((groups[g] for g in groups if agent in g), groups.get("*", []))
    best = ("allow", "")
    for kind, pat in rules:
        if not pat: continue
        rx = "^" + re.escape(pat).replace(r"\*", ".*").replace(r"\$", "$")
        if re.match(rx, path) and (len(pat) > len(best[1]) or (len(pat) == len(best[1]) and kind == "allow")):
            best = (kind, pat)
    return best

status, final, hdrs, body = get(url)
xrt = hdrs.get("X-Robots-Tag") or "-"
meta = re.findall(r'(?is)<meta\s+name=["\'](?:robots|googlebot)["\']\s+content=["\']([^"\']+)', body)
parts = urlsplit(url)
rstatus, _, _, rtxt = get(f"{parts.scheme}://{parts.netloc}/robots.txt")
kind, pat = robots_verdict(rtxt if rstatus == 200 else "", parts.path + ("?" + parts.query if parts.query else ""))
title = re.search(r"(?is)<title[^>]*>(.*?)</title>", body)
print(f"status        {status}   (final url: {final})")
print(f"x-robots-tag  {xrt}")
print(f"meta robots   {', '.join(meta) or '-'}")
print(f"robots.txt    HTTP {rstatus}; " + (f"BLOCKS Googlebot by '{pat}' -> a noindex here is invisible to Google" if kind == "disallow" else "allows Googlebot"))
if status == 200 and title and re.search(r"(?i)not found|404|no longer", title.group(1)):
    print("warning       200 with a 'not found' title: that is a soft 404, not a removal")

2026-09-12 我们拿它对三个真实网址各跑了一次:一个正常页、一个已删除的路径、一个被 robots.txt 规则挡住的路径。三种形状,不是统计。

$ python3 removal_check.py https://developers.google.com/search/docs/crawling-indexing/remove-information
status        200   (final url: https://developers.google.com/search/docs/crawling-indexing/remove-information)
x-robots-tag  -
meta robots   -
robots.txt    HTTP 200; allows Googlebot

$ python3 removal_check.py https://github.com/querywin-does-not-exist-20260912
status        404   (final url: https://github.com/querywin-does-not-exist-20260912)
x-robots-tag  -
meta robots   -
robots.txt    HTTP 200; allows Googlebot

$ python3 removal_check.py https://github.com/torvalds/linux/pulse
status        200   (final url: https://github.com/torvalds/linux/pulse)
x-robots-tag  -
meta robots   -
robots.txt    HTTP 200; BLOCKS Googlebot by '/*/*/pulse' -> a noindex here is invisible to Google

第三段才是要记住的。GitHub 的 robots.txt 对所有爬虫都写了 Disallow: /*/*/pulse,所以 GitHub 哪天真想把这页从 Google 拿掉,往 HTML 里加 noindex 是白加的,爬虫已经被告知别看。这段脚本的第一版用的是 Python 自带的 robotparser,对这个网址报的是「允许」,因为那个模块不认路径里的 * 通配符,Google 的解析器认。结论看着像样,却是错的。上面那个匹配器就是替换它的。

会怎么做错,以及你怎么发现

「我已经移除了,怎么还在」这类帖子背后,多半是下面六种做法之一。每种都有看得见的症状。

你做了结果症状
只用了 Removals 工具六个月左右后页面回来状态变成 "Removal expired"
在 robots.txt 挡住的路径上写 noindexGooglebot 永远读不到page indexing report:"Indexed, though blocked by robots.txt"
网址已经 404 了才去提交请求提前过期,之后同地址的页面算新页帮助页原话写着
把 noindex 写进 robots.txt被忽略:"not supported by Google"网址还在,robots.txt 看着没问题
对有变体的页选了 "Remove this URL only"只藏精确那一串;.html、参数、大小写都算不同兄弟网址照样在排
页面正文写着「找不到」,状态码却是 200Google 按自己的节奏判软 404page indexing report:"Soft 404"

本章有两条边界。它不讲图片,图片在同一个工具里有自己的移除路径;也不讲法律与个人信息的移除申请,那走的是 Google 另一个产品的表单。它也没法告诉你 Googlebot 多久会回来读你的 noindex,这看页面,Google 唯一给过的公开说法就是上面那个词,"months"。

Removals 工具还有一样碰不到的东西:Google 以外的任何爬虫。一条从 Google 搜索里藏起来的网址,每一个够得着它的 AI 爬虫照样在取。目标是让这一页彻底没人读,只有服务器侧那几种做法有用,改完之后用 AI 爬虫可达性检查 看一眼还有哪些爬虫够得着它。

常见问题

怎么把一条网址从 Google 搜索里永久移除?

让服务器自己说,再用 Removals 工具把前半段提速。永久指的是你这边三选一:网址返回 404 或 410、要密码、或者带一条 Googlebot 抓得到的 noindex。工具单独用只管六个月左右。

移除一条网址要多久?

走 Removals 工具,Google 移除页的说法是 "within a day"(2026-09-12 读取)。只靠 noindex 或 404,要等下次抓取,Google 文档对不重要的页面给的词是 "months"。两样配着用就是这个原因。

网站不是我的,能在 Search Console 里移除它的网址吗?

不能。Removals 工具要求 "You must own the property in Search Console"。别人站上的页面你只有 Refresh Outdated Content 表单,它 "You do not need to own the website to use",但只在页面或内容已经没了的时候才会通过;内容还挂在页上就提交,回来的是 "Denied: Content still on page"。

robots.txt 能把页面从 Google 移除吗?

不能,而且会妨碍移除。Google 移除页写的是 "Don't use robots.txt as a way to block your page."。一条 Disallow 拦住的是爬虫取页面,于是它读不到那页上的 noindex,网址光靠外部链接就能一直留在收录里。noindex 什么时候该用那一章把这个冲突从头到尾走了一遍。

Shopify 下架的产品页,Search Console 里选哪一种?

先看它现在返回什么。Shopify 下架后的产品网址返回什么状态码,我们没有逐个主题测过,不替它打包票;跑一遍上面的自检,看第一行。是 404 或 410 就直接提交 "Temporarily remove URL";是 200 加一条「售罄」页面,那就先决定它是该 301 到替代品还是该 404,再提交。

"Temporarily remove URL" 和 "Clear snippet in search" 差在哪?

前者把整条结果藏起来六个月左右。后者留着结果,用 Google 的话说 "Wipes out the page description snippet in Search results until the page is indexed again",之后摘要按页面当时的内容重新生成。页面要留、页上某句话必须消失,用后者。

本文属于 QueryWin 实操手册 · 第 2 阶

remove url from google:先分清是你的页面还是别人的,四种情况各用哪个工具、能管多久