一直一来很多人网站没有备案的原因其中之一就是:出于多种原因,网站正式运营过程中还是需要备案,接受不了网站因为备案流程需要关停1-2个星期的时间,一方面影响网站SEO,另一方面影响网站正常运营。

因为我以前有过很多的网站备案的经验,历史文章:网站备案流程_网站备案需要什么[简单明了解决备案各种问题],大多数都是新网站网站,不需要考虑免关站的场景。

但是近期计划重新维护博客,并考虑到如今网站是否已备案已经对搜索引擎的排名及收录产生的硬性影响,所以本文章就本次的博客的阿里云免关站备案做完整过程分享。

免关站备案思路

无论在哪个IDC平台备案,基本都会经过两个关键人工审核流程:

  1. IDC平台的审核,如阿里云备案,会有阿里云的备案专员对网站的真实性与是否能打开做验证。
  2. 根据你所在备案的省份,不同省份的通信管理局会再次审核。

所以思路就是确保在这两个审核节点中,让审核员无法正常访问网站,同时不影响网站大部分用户的正常访问、不影响搜索引擎爬虫访问即可。

既然明确这个目标,我们可以通过后端代码或前端JS来实现这个目的:对访问首页的用户特征做判断,肯定非审核员特征的行为做白名单放行,其他全部拦截。考虑方法的简便与实用性,可以优先考虑前端代码实现。

在开始教程之前,就不再赘述备案的常规过程,比如现在阿里云备案流程已经非常简单,只需要简单的线上填写信息就可以,不像以前还需要手工打印填写核验单、承诺书、指定幕布背景照片等等。

步骤一:首页顶部新增JS脚本

基于实际场景验证,一般只需要确保审核员审核时网站打不开即可,比如虽然阿里云的在备案过程提示需要网站关闭解析,以及审核客服在打电话告知时表达的都是需要网站停止解析,但实际上确保他们打开网站看不到网站内容即可,网站内容可以是空白,可以是故障状态码等等。

所以我们第一步需要到网站的首页源码,如index.php、index.html等文件(不同网站程序有所不同),以Wordpress为例,建议修改主题目录下的index.php文件(不建议修改根目录下的index.php,因为内页访问是经过index.php的,我们只做对访问首页的限制),如:wp-content/themes/wpgo/index.php,在文件最顶部新增以下两种代码之一。

代码一(稳妥型):根据来路与UA判断

效果:

所有直接访问网站首页,或其他地方点击过来,但来源网站不是自己指定的一些站点,全部拦截。

需要注意的是:

  1. 本代码不能直接套用,需要根据网站的实际情况做出对应的内容修改
  2. 本代码逻辑为:将主流搜索引擎爬虫纳入白名单、并且将自己网站的外链的主要来源网站都纳入白名单,除此之外所有的直接访问行为,或其他地方的点击跳转到本网站的行为全部予以返回错误页面。
  3. 这里之所以把所有点击跳转到自己网站的网站做个筛选,而没有全部放行的原因是:怀疑阿里或管局的审核系统后台是可以点击跳转网站快速查看网站状态的(没有验证)
  4. 如下图,可以通过百度统计,找到哪些网站来路比较多,纳入白名单

<script language='javascript' type='text/javascript' charset="utf-8">
var city = returnCitySN['cname'];
var s=document.referrer;      //访问来路
nav = navigator.userAgent;   //访问请求头,用于判断爬虫
if((nav.indexOf('baidu') != -1 || nav.indexOf('google') != -1 || nav.indexOf('bing') != -1 || nav.indexOf('so.com') != -1 || nav.indexOf('sougou') != -1) || (s.indexOf('google') != -1 || s.indexOf('bing') != -1 || s.indexOf('baidu') != -1 || s.indexOf('sm.cn') != -1 || s.indexOf('zhihu') != -1 )) {}
else{    //来路中修改为自己网站的主流来源域名
}
</script>

代码二(精准型):根据来路、UA、访客城市判断

效果:

所有直接访问网站首页,或其他地方点击过来,但来源网站不是自己指定的一些站点,并且是针对审核员所在省份(即其他省份不受来路约束)

需要注意的是:这个接口有时IP位置识别不准,就会导致审核员能正常打开网站(实测阿里云审核员说他们是在贵州省贵阳,但是实际他们的IP识别不到贵州省)

<script language='javascript' type='text/javascript' src='http://pv.sohu.com/cityjson?ie=utf-8' charset="utf-8"></script>
<script language='javascript' type='text/javascript' charset="utf-8">
var city = returnCitySN['cname'];   //访客城市
var s=document.referrer;   //访问来路
nav = navigator.userAgent;   //访问请求头,用于判断爬虫
if((nav.indexOf('baidu') != -1 || nav.indexOf('google') != -1 || nav.indexOf('bing') != -1 || nav.indexOf('so.com') != -1 || nav.indexOf('sougou') != -1) || (s.indexOf('google') != -1 || s.indexOf('bing') != -1 || s.indexOf('baidu') != -1 || s.indexOf('sm.cn') != -1 || s.indexOf('zhihu') != -1 )) {}
else{
judge=(city.indexOf('贵') != -1 || city.indexOf('安徽') != -1)  //第一个是阿里云审核的位置,一般在贵州贵阳,第二个是自己所在的省份,通信管理局一般在省会城市
if(judge) {
document.write('<center><h1>404 Not Found</h1></center><hr><center>nginx</center>');
var xmlhttp = new XMLHttpRequest();
xmlhttp.abort();
window.stop();

} else {}

}
</script>

最终效果

实际从阿里云提交备案到安徽省通信管理局,到审核通过仅仅用了5天时间

备案期间网站流量几乎无损失

如今的备案流程更加简便,审核效率也比以前快了不少,如果大家有网站需要备案还在犹豫网站关站的问题的话,可以参考一下本文中所分享的方法。

当然,有代码能力的朋友可以基于这个思路,针对自己网站的访客属性做出更优的免关站方案。