网站被攻击产生大量动态垃圾URL,返回200码,如何处理
网站被攻击以后,有一种SEO问题特别麻烦:
黑客或者异常程序批量生成大量动态垃圾URL,而且这些URL访问时全部返回200状态码。
例如网站本来只有几百个正常页面,突然在Google、百度、Bing里发现:
/example.php?id=随机字符
/?s=垃圾关键词
/product/随机目录/
xxxx.html
甚至几万个、几十万个完全不存在的地址。
更麻烦的是,这些URL打开以后可能显示垃圾内容,也可能看起来像404页面,但服务器实际上返回:
HTTP 200 OK
对于搜索引擎来说,200代表:
这个URL存在,而且服务器认为它是一个正常页面。
结果就可能出现:
垃圾URL被持续抓取;
大量进入索引;
抓取资源被浪费;
正常页面抓取受到干扰;
网站主题被大量垃圾内容污染;
搜索结果出现异常关键词;
甚至被搜索引擎识别为网站遭到入侵。
Google目前把未经站长允许、通过网站漏洞注入的新页面明确归为Hacked Content;百度针对网站被黑的处理建议同样要求清除被黑页面并让其返回404,而不建议把垃圾页面全部跳转到首页。
所以遇到这种情况,处理顺序一定要正确:
先修安全问题,再让垃圾URL停止返回200,然后处理搜索索引,最后再治理抓取。
第一:最严重的问题其实不是垃圾URL被收录,而是服务器为什么会给它返回200
比如网站真实存在:
https://www.example.com/product/a/
黑客产生:
https://www.example.com/abc-928374/
这个URL根本不存在。
正常情况下服务器应该返回:
404 Not Found
或者在确认永久删除时返回:
410 Gone
但现在访问:
/abc-928374/
服务器仍然返回:
200 OK
搜索爬虫得到的信号就是:
这里有一个正常网页。
如果随机修改URL:
/abc-111/
/abc-222/
/abc-333/
全部返回200,搜索引擎理论上就可能不断发现新的“页面”。
所以这类问题第一步不能只在Search Console里点删除。
必须先修:
网站路由、程序或者被植入的恶意代码。
否则今天删除1万个垃圾URL,明天可能又产生2万个。
第二:先判断到底是网站被黑,还是程序本身生成了无限动态URL
两种情况看起来很像,但处理方式不同。
情况一:真正被攻击植入垃圾页面
常见表现包括:
突然出现以前不存在的目录;
页面标题出现陌生关键词;
从搜索结果点击和直接访问看到的内容不同;
陌生管理员账号;
服务器文件出现异常修改;
搜索引擎提示Security Issues。
Google目前明确说明,被攻击的网站可能出现Page Injection,也就是攻击者通过漏洞在网站中自动增加大量垃圾页面;有些攻击还会使用Cloaking,让站长自己访问时看不到搜索爬虫看到的垃圾内容。
百度同样提醒,有些被黑网站只针对百度蜘蛛或者百度搜索来源显示异常内容,因此站长直接访问网站时可能看不出问题。
这种情况应该按安全事件处理。
情况二:程序路由配置错误
例如WordPress、CMS、自研框架或者伪静态规则配置异常。
任何不存在的地址都会套一个模板,然后返回200。
页面里可能写:
“内容不存在”
但状态码依然是200。
这种情况更接近:
Soft 404。
Google明确建议,当页面和内容已经不存在,又没有对应替代页面时,应返回真正的404或410,而不是展示错误页却继续返回200。
所以排查以前先确认:
垃圾URL是谁生成的。
第三:如果网站仍然处于被攻击状态,先停止继续生成垃圾页面
这一层优先级最高。
可以检查:
CMS核心程序;
主题;
插件;
服务器文件;
后台管理员账号;
数据库异常内容;
服务器日志;
最近修改文件;
定时任务;
CDN和WAF规则。
同时完成:
修复程序漏洞;
升级CMS和插件;
删除未知管理员;
更换后台和服务器相关密码;
撤销异常访问权限;
清理已确认的恶意代码;
检查服务器是否仍然持续生成垃圾URL。
百度针对被黑网站的官方处理建议就是先清理攻击内容、检查文件修改、账号异常和网站漏洞,必要时可以暂时停止网站服务,避免问题继续扩大。
如果攻击还没有停止:
SEO层面的删除基本都是治标。
第四:所有不存在的垃圾URL,核心动作是从200改成真正的404或410
这是整个SEO清理过程中最关键的一步。
比如攻击产生:
https://example.com/random-spam-123/
这页没有任何正常业务价值,也没有对应替代页面。
正确响应应该变成:
404 Not Found
或者:
410 Gone
Google明确表示,要永久从搜索中删除不存在的页面,最直接的方法之一就是让页面返回404或410;Googlebot重新抓取这些URL以后,会逐步从索引中处理掉。
Bing目前也是同样逻辑:已经删除的页面返回404或410,是从Bing和依赖Bing索引的Copilot结果中永久移除URL的标准处理方式。
所以如果攻击产生10万个URL,真正需要修的是:
让这一类URL统一返回正确HTTP状态。
而不是人工一个一个删除。
第五:千万不要把所有垃圾URL 301到首页
这是处理被黑SEO问题时特别常见的错误。
发现:
/spam-1/
/spam-2/
/spam-3/
于是统一:
301 → /
看起来网站里没有垃圾页面了。
实际上这会产生新的错误信号。
因为这些垃圾URL和首页完全没有内容对应关系。
百度针对网站被黑的处理指南已经明确提醒:
被黑页面应该设置404死链,不应把这些页面跳转到首页。
301应该用于:
旧页面确实迁移到了新的对应页面。
垃圾攻击URL没有对应内容时:
404/410更加准确。
第六:Canonical到首页也解决不了这个问题
还有一种做法是:
垃圾URL继续返回200。
然后页面里加入:
<link rel="canonical"
href="https://example.com/">
希望Google认为:
首页才是规范页面。
同样不推荐。
Canonical主要用于:
相同或高度相似页面的URL规范化。
攻击产生的垃圾页和首页通常完全没有内容关系。
更重要的是:
页面依然返回200。
搜索引擎还是需要抓取、分析,再判断Canonical是否接受。
真正已经不存在的垃圾内容,最干净的信号依然是:
404 / 410
第七:已经进入Google索引的大量垃圾URL怎么加快删除?
先强调顺序:
服务器先返回404/410,然后再使用删除工具。
Google目前提供Search Console:
Removals / 移除
可以把URL快速从Google搜索结果中临时隐藏。
Google明确说明,这种临时移除大约持续6个月;如果希望永久删除,网站本身仍然需要删除内容、返回正确状态码或者使用noindex等长期方案。
所以它适合:
垃圾URL已经大量出现在品牌搜索里;
需要先快速降低搜索曝光;
服务器端永久处理已经同步进行。
如果垃圾URL具有统一目录或者明显规律,可以根据Search Console当前支持的URL前缀处理方式减少人工提交量。
但不要把Removals当成最终解决方案。
最终决定URL会不会重新出现的,仍然是网站本身。
第八:百度已经收录大量攻击URL,怎么处理?
百度的处理逻辑同样很明确。
第一步:
让垃圾URL真正返回404。
第二步:
整理全量垃圾死链。
第三步:
进入百度搜索资源平台:
死链提交
提交这些404 URL。
百度官方针对网站被黑的处理指南明确建议:
清理全部被黑内容;
将被黑页面设置为404死链;
再通过百度搜索资源平台死链提交工具提交,并持续关注死链抓取和生效情况。
所以百度这边的处理链可以理解成:
清除攻击
↓
垃圾URL返回404
↓
整理死链
↓
死链提交
↓
等待百度重新抓取
这比单纯使用robots屏蔽垃圾路径更适合已经被索引的页面。
第九:Bing怎么处理?
Bing已经被索引的攻击URL,同样优先:
404 / 410
如果需要快速隐藏,可以使用Bing Webmaster Tools的:
Block URLs
目前Bing说明,该工具可以临时隐藏单个页面或者目录,最长90天。真正永久删除仍然要依靠404、410或者noindex。
服务器处理完成以后,还可以利用:
IndexNow
通知Bing:
这些URL已经发生变化。
Bing官方目前也建议页面删除、迁移或者更新以后使用IndexNow帮助搜索系统更快重新发现状态变化。
所以:
垃圾URL
↓
404/410
↓
Block URLs(紧急时)
↓
IndexNow
↓
等待重新抓取
就是比较完整的Bing处理方式。
第十:已经被索引的垃圾URL,不要马上用robots.txt全部封死
这里特别容易做反。
比如发现:
/spam/
下面有10万个垃圾页面。
第一反应:
User-agent: *
Disallow: /spam/
这样Googlebot以后确实不能继续抓这一目录。
问题是:
如果这些URL已经进入索引,搜索引擎也可能因此无法重新抓取页面,自然也就无法及时看到新的404、410或者noindex。
Google明确提醒,robots.txt不应该被当成删除网页搜索索引的主要方法。要让页面永久退出Google搜索,更合适的是删除页面或使用noindex;如果使用noindex,还必须允许Googlebot访问页面,才能读取这个指令。
Bing也明确说明:
robots.txt控制的是抓取,不等于索引控制;如果使用noindex,Bingbot必须能够访问页面才能看到这个标签。
所以对已经被索引的攻击URL:
先让搜索爬虫看到404/410。
等索引清理完成以后,再根据抓取情况决定是否需要robots减少无意义抓取。
第十一:那什么情况下可以用robots.txt限制垃圾URL?
如果攻击已经修复,并且程序本身存在某些永远没有搜索价值的无限空间,例如:
大量筛选参数;
搜索结果组合;
无限日历URL;
某些系统动态路径;
这些URL又没有必要进入搜索。
可以进一步研究robots规则,减少爬虫浪费。
Google自己的抓取问题指南就提到,对于Infinite Spaces,也就是无限动态URL空间,可以通过robots.txt阻止搜索爬虫继续抓取。
但逻辑仍然要分两阶段:
已经索引的垃圾URL
先:
404/410 → 重新抓取 → 清理索引。
尚未索引、未来也完全不需要抓取的无限URL
再考虑:
robots.txt减少抓取。
不要把两个目标混成一个。
第十二:如果垃圾URL还需要正常访问,可以使用noindex吗?
可以,但这种情况在攻击垃圾URL里其实不多。
如果某些动态URL:
业务上必须继续存在;
用户仍然需要访问;
只是明确不希望进入搜索结果,
可以返回200,同时加入:
<meta name="robots" content="noindex">
Google和Bing都支持这一方式。
但一定记住:
不要同时在robots.txt里禁止搜索引擎访问这个页面。
否则爬虫无法读取noindex。
对于完全没有业务价值的黑客垃圾URL:
直接404/410通常更干净。
第十三:Sitemap一定要把垃圾URL彻底清掉
如果攻击脚本已经把垃圾URL写进:
/sitemap.xml
或者WordPress自动生成的Sitemap中,一定要清理。
Sitemap应该主要保留:
正常200页面;
允许索引页面;
真正希望搜索引擎发现的Canonical URL。
不要出现:
攻击URL;
404;
410;
noindex;
垃圾参数;
无价值动态页面。
否则网站一边告诉搜索引擎:
这些页面已经不存在。
另一边Sitemap又继续主动提交它们。
信号就会混乱。
所以修复完成以后,必须重新检查:
sitemap.xml
sitemap_index.xml
第十四:检查站内链接,看看攻击URL是不是仍然被网站主动输出
有些攻击不只是生成页面。
还会把垃圾链接注入:
页脚;
文章正文;
隐藏区域;
模板;
数据库。
所以即使垃圾URL已经404,如果正常页面仍然大量链接这些地址,爬虫还会不断重新发现。
可以抓取全站,检查:
哪些正常页面还在链接垃圾URL;
有没有隐藏链接;
导航和页脚有没有异常;
HTML源码里有没有陌生域名或者异常路径。
清除这些链接以后:
发现入口也应该一起消失。
第十五:如果攻击产生几十万、几百万URL,要不要一个一个404?
不用。
关键是找URL规律。
例如垃圾URL都符合:
/spam/*
或者:
/?random=*
或者某一类不存在的伪静态路径。
应该从:
应用路由;
服务器配置;
CMS规则;
统一处理。
让匹配这类无效URL的请求直接返回正确状态码。
例如:
任意不存在内容
→ 404
这才具备规模化处理能力。
SEO层面最怕的是:
垃圾URL有100万个;
技术团队却准备Excel一行一行处理。
真正需要修的是:
产生垃圾URL的规则。
第十六:为什么垃圾URL返回200会严重浪费抓取?
假设Googlebot发现:
/page-1/
/page-2/
/page-3/
...
/page-100000/
每一个请求:
服务器都返回200。
搜索系统就需要继续:
下载;
渲染;
分析;
判断内容;
决定是否索引。
对于中大型站点来说,大量无价值动态URL会明显增加搜索爬虫在垃圾空间里的工作量。
Bing最新站长指南也明确建议网站避免产生大量低价值URL,例如重复内容或者带大量参数的URL,因为这些页面会造成低效抓取。
所以解决200垃圾URL还有一个重要目标:
让搜索引擎把更多抓取资源放回正常页面。
第十七:需要检查Search Console Security Issues和Manual Actions
如果Google已经识别到攻击,可以进入Search Console检查:
Security Issues
看看是否存在:
Hacked content;
Malware;
其他安全问题。
同时也可以检查:
Manual Actions
看网站是否存在人工措施。
Google的垃圾政策明确把通过漏洞未经允许加入网站的内容归为Hacked Content。
如果Security Issues确实存在:
清理攻击;
修复漏洞;
确保异常内容彻底消失;
再按照Search Console提示申请重新审核。
不要只删除几个搜索结果截图里看到的URL。
Google需要看到:
网站安全问题已经真正解决。
第十八:网站被黑以后,后台管理员和Search Console权限也要检查
有一种容易忽略的攻击方式,是攻击者拿到网站控制权以后,又把自己的账号添加为:
Search Console Owner;
网站管理员;
CMS管理员。
Google过去就公开提到过,攻击者可能验证自己为Search Console站点所有者,再利用站点权限推动垃圾URL抓取。
所以修复网站时最好同时检查:
Search Console用户;
Bing Webmaster Tools用户;
CMS后台用户;
服务器账户;
DNS管理权限;
CDN账户。
发现未知账号及时撤销。
否则只清理文件,攻击者仍然拥有其他入口。
第十九:清理以后,404数量暴涨需要担心吗?
如果这些404本来就是攻击产生的垃圾URL:
不用因为数量大就重新把它们变成200。
比如攻击产生20万个URL。
修复以后:
20万个地址全部变成404。
这其实代表:
服务器终于正确告诉搜索系统:
这些页面不存在。
Google也明确表示,页面真正不存在时返回404或410就是正确处理方式。
所以不要看到Search Console:
404数量突然变成几万。
然后为了“减少错误”把所有404重新跳首页。
真正应该关注的是:
这些404是不是垃圾URL;
正常页面有没有误404;
垃圾URL数量有没有停止继续增加。
第二十:什么时候说明垃圾URL问题真正解决了?
我会看五组数据。
第一:服务器层
新的随机URL是否已经不能返回200。
第二:URL数量
垃圾URL是否停止继续增长。
第三:抓取
垃圾路径的抓取量是否逐渐下降。
第四:索引
搜索结果里的攻击页面是否逐步减少。
第五:正常SEO
核心页面:
抓取;
索引;
曝光;
排名;
是否逐渐恢复正常。
注意,垃圾索引不会在代码修好的当天全部消失。
搜索引擎需要:
重新抓取;
重新处理;
更新索引。
这个过程可能持续一段时间。
所以修复以后重点看:
趋势是不是持续向下。
第二十一:可以直接按照这套顺序处理
如果网站现在已经出现:
大量动态垃圾URL + 200状态码,
可以按照下面的顺序执行。
第一步:停止攻击
修复漏洞,清除异常程序和权限。
第二步:找垃圾URL规律
分析:
目录;
参数;
标题;
日志;
页面模板。
第三步:让垃圾URL停止返回200
无对应内容:
返回404或410。
第四步:不要301首页
也不要把无关垃圾页Canonical到首页。
第五步:清除垃圾内链
确保正常页面不再输出攻击URL。
第六步:清理Sitemap
只保留正常Canonical页面。
第七步:搜索引擎加速清理
Google:
Removals用于紧急临时隐藏。
百度:
404 + 死链提交。
Bing:
404/410 + Block URLs / IndexNow。
第八步:检查安全后台
Search Console Security Issues、管理员账号和服务器权限。
第九步:持续观察索引
不要因为短期404数量增加重新改成200。
第十步:做好长期安全防护
及时升级CMS、主题和插件,限制异常账号权限并持续检查服务器日志。
整个顺序里最重要的就是:
先关掉垃圾URL产生源,再治理搜索索引。
最后:动态垃圾URL返回200,真正要修的是“服务器告诉搜索引擎页面存在”这件事
所以如果网站被攻击以后出现:
10万条;
50万条;
甚至更多随机动态URL。
最危险的问题并不只是:
搜索引擎把它们收录了。
真正的问题是:
这些本来不存在的页面,服务器还在告诉搜索引擎它们是正常的200页面。
只要这一点没有修:
Google;
百度;
Bing;
都可能继续发现和处理新的垃圾URL。
正确的处理链应该是:
修复攻击和漏洞
↓
停止继续生成垃圾URL
↓
无效URL返回404/410
↓
删除垃圾内链和Sitemap入口
↓
提交搜索清理
↓
等待重新抓取
↓
持续监测索引和正常页面
Google目前明确建议,虚假或已经删除的URL应返回404或410;对于已经进入搜索结果、又需要紧急隐藏的URL,可以先使用Removals,但永久删除仍然必须从网站源头解决。
百度对被黑网站的建议更加直接:
清理被黑页面,设置404,再提交死链,而且不要把被黑页面全部跳转首页。
Bing也采用相同的永久删除逻辑:404、410或者noindex,同时可以利用Block URLs和IndexNow帮助加快搜索结果更新。
所以真正处理这类SEO事故时,不要先想着:
怎样把几十万个垃圾URL快速从搜索结果全部删掉?
应该先问:
为什么一个根本不存在的随机地址,现在还能返回200?
把这个源头解决以后,搜索清理才会真正开始。
否则删除再多URL,也只是一直追在攻击脚本后面处理结果。
©特别声明
文本来源:https://www.yuezengzhang.com/content/8234.html
原创作者:悦增长GEO服务商





