镜像站本质上是一个反向代理——有人在服务器上配了一条规则,把某个域名的所有请求转发到你的服务器,然后把返回的HTML内容直接显示。用户访问 mirror.com/article-123,镜像服务器去你的站抓取 yoursite.com/article-123 的内容,原样吐给用户。整个过程,用户完全不知道自己在看一个镜像站。
这篇文章从四个层面把防镜像这件事讲清楚:怎么检测网站有没有被镜像、怎么从服务器端屏蔽镜像站、怎么让搜索引擎识别你是原创、以及镜像站已经收录了怎么申诉下架。
一、先确认你的站是不是被镜像了
三种检测方式,从简单到复杂,十分钟内能确认。
方法一:搜索引擎查标题
复制你网站首页的标题(title标签里的完整文字),在百度里用 intitle:"你的首页标题" -site:你的域名.com 搜索。如果搜索结果里出现了其他域名的页面,且标题完全一致,点进去看——如果内容和你的站一模一样,那就是镜像站。同理可以拿任意一篇原创文章的标题来搜。
方法二:查服务器日志里的Referer
打开服务器访问日志,搜一下有没有异常的Referer来源。正常的Referer应该是搜索引擎、社交媒体、或者友链网站。如果你看到一个陌生的域名频繁出现在Referer里,而且每次请求的URL路径都和你网站的路径完全一致——大概率是镜像站在反向代理你的站,每次有用户访问镜像站,镜像服务器就来请求你的站,Referer里带的就是镜像站的域名。

方法三:在线工具批量检测
Copyscape(copyscape.com)输入你的域名,会列出互联网上所有内容相似的页面。Siteliner(siteliner.com)能扫出站内重复内容和外部匹配。这两个工具免费额度有限,但查一次确认有没有被镜像完全够用。Google Search Console的"链接"报告也能看到有哪些外部域名在大量链接到你的站——如果一个陌生域名链了几百上千条过来,大概率就是镜像。
二、镜像站怎么实现的技术原理——知道原理才知道怎么防
镜像站的技术实现分三种,防护方式各不相同。
三种方式里,反向代理镜像最头疼——因为它是实时的,你更新文章它同步更新,而且从服务器日志看,每次请求都来自镜像服务器,不是来自爬虫。你封了爬虫的IP没用,因为镜像服务器用的是自己的IP。
三、服务器端防镜像——四层拦截,从最有效到最基础
第一层:Nginx/Apache识别反代请求并拒绝
反向代理请求有一个关键特征:请求头里的Host字段是镜像站的域名,不是你的域名。正常用户访问你的站,Host是你的域名;镜像服务器转发请求时,Host字段可能保留镜像站的域名,或者被镜像服务器改成了你的域名。
大部分配置不太专业的镜像站,Host字段会暴露。在Nginx里加一段配置:
server {
listen 80;
server_name yoursite.com www.yoursite.com;
# 如果Host不是你的域名,直接返回403
if ($host !~* ^(yoursite\.com|www\.yoursite\.com)$) {
return 403;
}
}
但这种方式有个局限:专业一点的镜像站会修改Host字段伪装成你的域名。这时候需要结合其他方式。
第二层:在页面里嵌入JS域名检测——在浏览器端强制跳转
服务器端拦截不了,就在浏览器端拦截。在网站所有页面的<head>里嵌入一段JavaScript,检测当前浏览器地址栏的域名是否是你的域名,如果不是就强制跳转或弹出警告。
(function() {
var allowedDomains = ['yoursite.com', 'www.yoursite.com'];
var currentHost = window.location.hostname;
var isAllowed = allowedDomains.some(function(domain) {
return currentHost === domain;
});
if (!isAllowed) {
window.location.href = 'https://yoursite.com' + window.location.pathname;
}
})();
</script>
镜像站是把你的HTML原样展示的,所以这段JS也会在镜像站上执行——浏览器检测到域名不对,直接跳转到你的真实域名。用户访问镜像站瞬间被跳走,镜像站等于废了。
不过有两个问题需要注意:①搜索引擎爬虫不执行JS,所以这招只对真实用户有效,对搜索引擎收录镜像站无效;②如果镜像站做了内容替换(把你的JS删了),这招也失效。所以这一层要配合下一层一起用。
第三层:在HTML源码里嵌入canonical标签——告诉搜索引擎谁是原创
这是防镜像对SEO影响最关键的一步。在你的每个页面<head>里加上:
镜像站抓取你的HTML时,会连canonical标签一起抓走。搜索引擎(百度、Google)爬取镜像站时,看到canonical标签指向你的域名,就会知道"这个页面的原始出处是yoursite.com",把权重归到你的站上。这是搜索引擎官方推荐的处理重复内容的方式。

但canonical是"建议"不是"命令"——搜索引擎可以选择遵守也可以选择忽略。所以还需要配合下一步。
第四层:向搜索引擎提交站点地图和域名所有权
在Google Search Console和百度站长平台验证你的域名所有权,然后提交sitemap。搜索引擎收录镜像站后,你可以通过站长平台提交"内容抄袭"投诉。百度站长平台有"侵权举报"入口,Google有"Copyright Removal"工具。提交后一般1-2周内处理,镜像站的页面会被降权或移除索引。
四层防护的优先级
· canonical标签(第三层)——必须先做,这是保护SEO的底线,成本最低效果最持久
· JS域名检测(第二层)——紧接着做,阻止真实用户访问镜像站
· 服务器端拦截(第一层)——技术条件允许就做,从源头阻断
· 搜索引擎投诉(第四层)——发现镜像站已收录后立即做,清除搜索引擎里的镜像页面
四、防护升级——让镜像站即使复制了内容也用不了
前面四层是"防",下面这些是"让对方复制了也没法用"。
防盗链——图片和资源只允许你自己的域名引用
镜像站直接用你的图片URL,流量走你的服务器。在Nginx里配置防盗链,只允许你自己的域名(以及搜索引擎爬虫)引用图片。其他域名的请求直接返回一张"盗图警告"图片或403。
location ~* \.(jpg|jpeg|png|gif|webp|js|css)$ {
valid_referers none blocked yoursite.com *.yoursite.com;
if ($invalid_referer) {
return 403;
}
}
禁止iframe嵌入——防止别人用iframe套你的站
在Nginx配置里加一行响应头,或者在HTML的<head>里加meta标签。加了之后,任何网站试图用iframe嵌入你的页面都会显示空白。
add_header X-Frame-Options "SAMEORIGIN" always;
在文章内容里嵌入域名信息
每篇文章正文里至少出现一次你的完整域名(比如"更多内容请访问yoursite.com"),不要只在页脚放——页脚容易被批量删除。文章中间嵌入的域名信息,镜像站要么原样保留(帮你做外链),要么手动删除(增加他们的维护成本)。
使用绝对URL而不是相对URL

网站内所有链接(内链、图片、CSS、JS)都用绝对URL(https://yoursite.com/xxx)而不是相对URL(/xxx)。这样即使被镜像,页面里的所有链接仍然指向你的真实域名。用户在镜像站上点任何链接都会跳回你的站。
五、发现镜像站后怎么处理——技术+法律+搜索引擎三步走
六、防镜像日常检查清单
镜像站不是一次处理完就高枕无忧的。把下面这些加到日常运营里:
· 每月一次:搜索引擎自查
拿3-5篇核心文章的标题,在百度和Google里用intitle语法搜,排除自己的域名。看有没有新出现的镜像站。
· 每周一次:Google Search Console查外部链接
在GSC的"链接"报告里,按"链接数降序"排列外部域名。如果一个陌生域名突然链接了几百几千条过来,点进去看——大概率是镜像站。
· 每次发新文章后:检查canonical标签
确保每篇文章页面都有正确的canonical标签指向自身URL。可以用浏览器的"查看网页源代码"检查,或者用SEO插件自动生成。
· 每季度一次:更新JS域名检测脚本
如果你换了域名、加了子域名,记得更新JS检测脚本里的allowedDomains列表。别换了域名之后自己被自己的脚本跳走了。
· 有条件的:设一个监控脚本
写一个Python脚本,每天自动用intitle搜几篇核心文章标题,对比搜索结果里的域名列表。如果有新域名出现,自动发邮件/微信通知。这个方案适合内容量大的站,手动检查顾不过来。
网站被镜像这件事,最怕的不是技术上的损失——服务器资源被占用、流量被截走、广告收入被分走——这些都能算清楚。最怕的是搜索引擎把你的原创站当成抄袭站降权了。百度在2022年的一次算法更新后,对镜像站的识别能力确实提升了,但还没到100%准确。所以防镜像的核心策略是两条腿走路:技术上让镜像站用不了(JS跳转+防盗链+禁iframe),SEO上让搜索引擎知道谁是原创(canonical标签+站长平台验证+及时投诉)。两条腿都做好,镜像站对你的影响可以从"伤筋动骨"降到"不痛不痒"。
