前几天一个朋友半夜发消息问我,他在搜索引擎里搜自己的站名,冒出来一堆莫名其妙的页面,点进去不是赌博就是卖药的,域名却是他自己的。他第一反应是网站被黑了。其实还有另一种情况更常见:别人恶意做站群,把你的域名挂在他们站上刷外链;也可能是你自家模板文件里被塞了隐藏链接,从页脚偷偷往外输出。想真正把网站外链删干净,光在报告里点几下是不够的,得一路查到文件里去。这篇就按先查来源域名、再提交拒绝、最后上服务器真删的顺序,把这套流程完整走一遍。

先分清两种外链:别人挂你的,和你站里长出来的
这两个问题看着像,处理方式完全不同,先分清再动手。第一种,是别人网站上有指向你域名的链接,那些页面你根本没权限动,所以删是删不掉的,只能向搜索引擎提交拒绝,让它们别把那些链接当成对你的投票。判断标准很简单:在站长工具的外链报告里看来源域名,如果来源全是陌生域名,锚文本清一色敏感词,短时间冒出几千条,基本就是被恶意刷的。第二种,是你自己的页面源码里多出了指向垃圾站的外链,访客看不见,因为被样式隐藏了,这种才算真正意义上的站内暗链,必须上服务器删。
还有个容易搞混的点:早些年花钱买来的那些所谓高权重外链,后来被判定成垃圾,也属于要清理的对象。这种情况多半是自己以前埋的雷,来源域名往往是一批镜像站或者内容农场,锚文本高度重复。碰到这类,先别急着一刀切,把域名按出现量排个序,量最大又明显不相关的优先处理,正常的行业站、同行站先留着手动判断,别把有用的链接一起拒掉。
查异常来源:外链报告到底该翻哪几栏
Google 这边,进 Search Console,左侧的链接报告能看到外部链接总数、热门链接网站和热门锚文本,这三块就是排查入口。先看热门链接网站,把列表导出成表格,按域名聚合,凡是域名本身明显是垃圾站、锚文本全是敏感词、或者一夜之间数量暴涨的,全都记下来。百度这边在搜索资源平台查看外链相关报告,具体入口和字段,不同时期会有调整,以官方页面当时的说明为准。第三方查询工具的数值只能当参考,各家口径不一样,别拿它当唯一依据。
排查时有个偷懒但有效的办法:把导出的域名列表丢进文本文件,一行一个,边看边标。看到不认识的域名先别急着定性,用浏览器打开那个页面看一眼,有时候是同行转载你文章时留下的版权链接,属于正常外链,误伤了自己吃亏。真正要处理的,是那种整站都是拼凑内容、页面全是关键词堆砌、还挂着一堆导出的站。这一步别嫌耗时,清单做干净了,后面提交拒绝才准。
Google 的 disavow 文件:拒绝不等于删除
先说个最容易被误解的点:disavow 中文一般叫拒绝外链,它表达的意思是请搜索引擎忽略这些链接,而不是把链接从别人网站上删掉。别人站上的内容你管不着,能做的只有这一步。文件是纯文本格式,一行一个条目,域名级别前面加 domain: 前缀,比如 domain:bad-example.com,单条页面就直接写完整网址。行首用井号开头可以写注释,方便以后回来看。文件本地留一份备份,后面再发现新域名可以继续往里追加。
提交入口在 Search Console 的拒绝链接工具里,上传文件后平台会显示已提交的条目数量和处理状态,生效需要时间重新抓取,具体多久以官方说明为准。这里要提醒一句,别一上来就全站拒绝,正常的行业外链、同行给的链接都是资产,误拒可能白白丢掉权重。我的做法是只拒绝证据明确的垃圾域名,一次提交量控制在自己能复查的范围内,过一段时间再翻一遍外链报告,看有没有新的来源冒出来。
百度这边:资源平台的拒绝外链工具怎么用
百度搜索资源平台里同样提供了拒绝外链的入口,作用是告诉百度别把这些链接当成对网站的推荐。提交格式和 Google 那份不完全一样,页面上会给出当前支持的写法,照着填就行,别自己发明格式,格式不对容易整批失败。提交前需要先完成站点验证,也就是证明这个域名确实归你所有;另外这类工具通常有额度或者次数限制,用完就得等,具体规则以页面提示为准,别一次把额度全砸在一批还没看清的域名上。
说实话,现在百度对外链的依赖比早些年低了很多,正常情况下几条垃圾外链未必就能把你怎么样。但如果是被恶意盯上的站,报告里突然多出成千上万条指向你域名的垃圾链接,还是值得清理一遍,至少心里有底。这里的顺序我建议是这样:先在报告里筛出可疑域名,确认是垃圾站,再提交拒绝,同时立刻去服务器上查站内有没有暗链。两件事并行做,比只做一件稳当得多。
真要删除,还得上服务器:两条命令揪出隐藏外链
拒绝只是止血,站内被注入的链接必须动手删。先用 SSH 连上服务器,进网站根目录,动手之前把主题和插件目录整个打包备份一份,删错了还能还原。然后跑这条命令:grep -rn “display:none” wp-content/themes wp-content/plugins,它会把主题和插件文件里所有带 display:none 的地方连文件名和行号一起列出来。隐藏链接最常见的手段就是用样式把带链接的容器藏起来,访客看不见,爬虫在源码里却看得一清二楚。顺带把 visibility:hidden 和 text-indent 这类写法也搜一遍。
第二条是 grep -rn “base64” wp-content,专门找经过编码的可疑脚本。很多挂马代码不是明文写的,而是把一段跳转或者外链输出脚本用 base64 编码,再用 eval 之类的函数解开执行,你在页面上根本看不出痕迹,一搜 base64 就容易现形。命中的结果不一定都是马,正规插件也可能用这套编码做配置或者图片处理,所以别看到就删,先把文件路径、修改时间和上下文挨个看清楚。判断标准我总结了几条:修改时间明显晚于同目录其他文件、代码被压成很长的一行、变量名是乱码、里面夹着不认识的域名,几条里占了两条以上,基本可以按恶意代码处理。
重灾区在 footer.php、functions.php 和被篡改的 .js
按我的经验,被塞隐藏外链的位置就那么几个。第一个是 footer.php,页面底部最容易藏东西,一段隐藏容器或者一个透明链接就能全站生效;第二个是 functions.php,恶意代码常常挂在 wp_footer 或者 wp_head 这类钩子上,页面一加载就把外链吐出来,找起来比前一种麻烦;第三个是主题或插件目录里的 js 文件,被追加一段跳转代码,访客点一下就被带去别的站。header.php、index.php、single.php 也顺手看一眼,哪个都别漏。
清理时最稳的办法是做版本对比:从官方渠道下载同版本的主题和插件安装包,解开,把可疑文件跟原版逐个比对,多出来的那段就是脏东西。找不到原版包,就用 find wp-content -type f -mtime -7 把最近一周被动过的文件筛出来,一个一个看。改完记得保存成 UTF-8 编码,别把中文注释搞成乱码。另外提醒一句,数据库里也会藏外链,wp_options 里的挂马脚本和 wp_posts 正文里被追加的链接都得翻一遍,光清文件是清不干净的。
清完别急着收工:改密码、查后门、盯复发
文件清干净只算恢复了一半,因为恶意代码能进来,说明门还开着。接下来这几件事一件都不能省。把后台所有管理员账号的密码重置一遍,顺手删掉不认识的管理员账号;FTP 或者 SFTP、数据库、服务器 SSH、主机控制面板,只要是能写文件的入口,密码统统换一遍,别几处共用一个。后台把两步验证开起来,主题、插件、核心都升到当前最新版本,很多站被打进来靠的就是一直没修的旧漏洞。
然后就是盯复发。清完当天查一次,隔三天再查一次,一周后再搜一遍同样的关键词,如果那两条 grep 又搜出东西来,说明还有后门没清掉。后门常见的藏身处有几个:插件目录里名字看着像正常组件却没人认识的文件、上传目录里伪装成图片的 php 文件、还有系统定时任务,用 crontab -l 看一眼有没有陌生条目在偷偷把马重新写回来。查出复发别只删文件,顺着时间点翻访问日志,把入口找出来封掉,不然就是无限循环。
几个常见的坑,提前替你把话说透
第一个坑,只在工具里点了拒绝就以为完事了,可站内文件里的隐藏外链还在,访客和爬虫照样看得见,等于门锁了窗户全开着。第二个坑,看到外链报告里域名多就全选拒绝,把同行的正常推荐也一起拒了,得不偿失。第三个坑,文件删了密码没改,过几天原样复发,白忙一场。第四个坑,去用什么一键清理外链的软件,钱花了不说,还得把后台账号密码交到别人手里,风险比问题本身还大。这几条都是我或者身边人踩过的,别重复。
外链清理这事说到底就四步:先在工具里把异常来源域名翻出来,Google 用 disavow 文件提交拒绝,百度在资源平台用拒绝外链工具提交,然后回服务器上用 grep 把隐藏链接和编码脚本挖出来真删,最后改密码、更新版本、盯一段时间看有没有复发。它不是什么一劳永逸的活,建议每个季度翻一次外链报告,也就几分钟的事,早发现早处理,总比等排名掉了再手忙脚乱强得多。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!