近日,发现网站死链比较多,尤其是一些合作过的推广项目,造成了大量的死链。当然,死链对于搜索引擎来说是非常不友好的,将死链提交给搜索引擎是一个比较好的解决途径。
但是,问题来了,网站页面收录了几十万,我根本不知道哪些链接是死链啊,也没办法一条一条去核实统计,怎么办呢?网上找的死链检测工具也不好使。直到看到了下面这个思路:
遇到死链,服务器不就会返回404 not found嘛,完全可以在404页面进行操作,把相关的死链保存下来,然后隔一段时间提交给搜索引擎即可。还可以通过user agent的参数进行数据筛选!
好了,思路有了,接下来就是具体操作。以前的404页面都是用的纯html,现在既然涉及统计操作,当然要改成php动态页了。先在nginx服务器conf文件配置一下:
- error_page 404 /404.php;
- location = /404.php {
- root /website/www; #这是404.php的所在目录
- try_files $uri =404;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
复制代码 这样配置之后,404.php就可以正常运行了。然后,在页面头部插入以下php代码:
- <?php
- if(stripos($_SERVER['HTTP_USER_AGENT'],'spider') !== false){
- $scheme = $_SERVER['REQUEST_SCHEME']; //协议
- $domain = $_SERVER['HTTP_HOST']; //域名/主机
- $requestUri = $_SERVER['REQUEST_URI']; //请求参数
- $currentUrl = $scheme . "://" . $domain . $requestUri;
- $file = @file("deadlinks.txt");//deadlinks.txt
- $check = true;
- $ext = strtolower(pathinfo($currentUrl,PATHINFO_EXTENSION));
- $tmp = array('php','htm','html');
- if (!in_array($ext,$tmp))
- {
- exit;
- }
- if (strlen($currentUrl) > 150)
- {
- exit;
- }
- if(is_array($file) && !empty($file))
- {
- foreach($file as $f){
- if(trim($f) == trim($currentUrl))
- {
- $check = false;
- break;
- }
- }
- }
- if($check){
- $fp = fopen("deadlinks.txt","a");//deadlinks.txt 就是在网站根目录的记录死链的文件
- flock ($fp, LOCK_EX) ;
- fwrite ($fp, $currentUrl."\r\n");
- flock ($fp, LOCK_UN);
- fclose ($fp);
- }
- }
- ?>
- //这里插入显示404的html代码
复制代码 把代码上传到服务器之后,访问死链文件,就可以看到网站的死链了。记得要把死链文件的读写权限设置为777哦。成果如图所示:
好了,就分享到这里,祝大家成功! |
上一篇:nginx日志报failed 13: Permission denied错误,原来是帐户权限问题下一篇:小米:需要输入当前锁屏密码解密手机,解锁报1004未知错误
|