在站长工具里查友情链接,突然冒出来几个不认识的域名,点开还显示正常,这时候别急着把友情链接模块删了。黑链经常不在友情链接里,站长工具抓的是首页,黑链可能藏在首页源码、公共模板、数据库、JS文件甚至服务器配置里。想找到具体链接,得顺着页面输出往回查。
先确认它到底出现在哪。打开网站首页,右键查看源代码,Ctrl+F搜那个陌生域名。如果源码里有,复制整段a标签,看锚文本和链接地址。有些黑链用display:none、font-size:0、颜色跟背景一样、position:absolute;left:-9999px藏起来,肉眼看不见,源码里一搜就现形。还有的用iframe,宽高设成0,或者放在noscript里,专门给蜘蛛看。搜域名时别只搜完整域名,把主域名和关键词也搜一遍,防止被拆开拼接。
如果首页源码搜不到,就用站长工具的外链分析、友情链接查询多看几页。站长之家、爱站这类工具通常会给出链接所在页面和锚文本,有的还能看到快照。拿快照跟当前页面比,差异处往往就是被挂的地方。百度站长平台的抓取诊断也好用,用百度蜘蛛UA抓首页,看返回的HTML里有没有陌生链接。自己用curl模拟蜘蛛更直接:curl -A "Baiduspider" 你的网址,把返回内容存下来搜域名。有些黑链只对蜘蛛输出,普通浏览器看不到,这一步能逮住。
接着查公共模板。黑链最爱藏在header、footer、sidebar、index、列表页和内容页模板里。用服务器命令行搜:grep -rn "可疑域名" 模板目录,别只搜首页文件。很多站首页正常,内页模板被加了链接。模板里常见手法是判断UA,蜘蛛来就输出,普通用户来就隐藏。看到一段莫名其妙的base64或者eval,也要警惕,可能是JS动态插入。公共JS文件、统计代码、广告位JS都要打开看,搜document.write、innerHTML、appendChild这些词。
数据库也别放过。友情链接表、文章表、自定义字段、评论表、配置表都可能被塞链接。用phpMyAdmin或者命令行跑SQL,比如select * from 表名 where 内容字段 like ''%可疑域名%''。WordPress站重点看wp_posts、wp_options、wp_comments,dedecms看dede_addonarticle、dede_arctype。有些黑链写在文章正文末尾,前台被CSS隐藏,数据库里一搜就有。

还要看文件修改时间。黑链挂上去,文件多半被改过。用find 网站根目录 -type f -mtime -7,列出最近七天改过的文件,重点看php、js、html、模板文件。有备份的话,直接diff当前文件和备份,差异一目了然。没有备份就看日志,访问日志里找可疑POST请求、异常User-Agent、频繁访问admin或者编辑器的IP。服务器上如果有计划任务、后门文件,也要清掉,不然删了链接还会再挂。
缓存和CDN容易让人白忙。明明模板删了,页面还有黑链,先清网站缓存、CDN缓存、OPcache,再看伪静态规则和.htaccess有没有被加跳转。有时候黑链不在页面里,而在404页面、错误页、移动端模板里,手机访问和PC访问输出不一样,分别查一遍。
找到链接后别只删那一行。改后台密码、数据库密码、FTP密码,升级程序补漏洞,检查上传目录有没有webshell。删完再用站长工具查一遍友情链接和外链,用蜘蛛UA抓一次首页确认干净。黑链这东西,找到具体链接只是第一步,把入口堵住才算完。