SEO技巧:Shell脚本自动提交网站404死链到搜索引擎

最近在折腾博客主题,通常来说大多数人认为换主题会影响 SEO,实际上只要你把工作都做到位了,是没有任何问题的。比如,换主题后你得仔细检查标题和描述等内容是否发生改变、换主题后是否带来了大量的 404 页面等。当然,更细微的可能是换主题之后,网站的内链网络也发生了微妙的改变,但是整体的影响较小。

总之,张戈博客这次更换主题基本上没有看到明显的 SEO 影响,反而出现几个新的关键词。好了,题外话到此结束,下面分享一下从 Nginx 日志分析并生成能提交到搜索引擎的死链文件的 Shell 脚本。

一、前因后果

今天在看百度站长平台的抓取频次的时候,发现最近抓取次数有所下滑,并且平均响应时间也有所上升,感觉和最近频繁折腾主题以及访问量增加有所关系:

这个问题倒是好解决,等主题稳定了,页面静态缓存文件也就不会频繁被手工删除,整个网站的抓取响应时间应该就能回到正常水平。

再往下看,却发现网站抓取中出现的 404 数据也呈上升趋势:

实际上,张戈博客以前是手动提交过死链文件的,但后来没时间也就没去搭理更新了。看来这个工作还得重新做起来,并且实现自动化才行了。

二、Shell 脚本

说做就做,简单的写了个 Shell 脚本就搞定了!

脚本名称:网站死链生成脚本

脚本功能:每天定时分析网站前一天的 nginx 日志, 然后提取状态码为 404 并且 UA 为百度蜘蛛的抓取路径,并写入到网站根目录下的 death.txt 文件,用于提交百度死链。

脚本代码

#!/bin/bash
#Desc: Death Chain File Script
#Author: ZhangGe
#Blog: http://zhangge.net/5038.html
#Date: 2015-05-03
#初始化变量
#定义蜘蛛UA信息(默认是百度蜘蛛)
UA='+http://www.baidu.com/search/spider.html'
 
#前一天的日期(nginx日志)
DATE=`date +%Y-%m-%d -d "1 day ago"`
 
#定义日志路径
logfile=/home/wwwlogs/zhangge.net_${DATE}.log
 
#定义死链文件存放路径
deathfile=/home/wwwroot/zhangge.net/death.txt
 
#定义网站访问地址
website=http://zhangge.net
 
#分析日志并保存死链数据
for url in `awk -v str="${UA}" '$9=="404" && $15~str {print $7}' ${logfile}`
do
        grep -q "$url" ${deathfile} || echo ${website}${url} >>${deathfile}
done

使用说明:

①、脚本适用于每天都做了日志切割的 Nginx,没有做的朋友可以参考博客之前的文章:

nginx 日志切割及 7 天前的历史日志删除脚本

②、将代码保存为 shell 脚本,比如 deathlink.sh,然后如下建立任务计划:

#执行如下命令编辑任务计划
[root@Mars_Server ~]# crontab -e
 
#每天凌晨1点执行此脚本(注意脚本的实际路径)
0 1 */1 * * /root/death.sh >/dev/null 2>&1
 
#按下ESC,然后键入 :wq 保存并退出

③、执行后,将在网站根目录生成死链文件:death.txt,可以浏览器访问看看内容,比如:

http://zhangge.net/death.txt

④、前往立即前往提交这个死链文件即可:

这样一来,系统会每天执行脚本,将昨天的百度蜘蛛爬到的 404 路径保存到网站根目录下的 death.txt,以备百度死链抓取工具前来抓取。

效果截图:

下面贴上这几天死链抓取(百度定时抓取,无需人工干预)及处理情况,效果还是非常明显的:

值得说明的是,这些死链记录是累加的,已保存的死链数据,就算百度蜘蛛不爬了也会继续保存,需要人工清理,不过一般不清理也没啥问题。

注意事项:

①、如果你的 nginx 服务 并没有配置相应的 access 日志,请自行在 server 下添加所需网站的 access 日志,否则脚本无法使用;

②、脚本适用的 access 日志格式如下:

log_format  access  '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for';

如果和你的不一样,则需要修改脚本中的 awk 指定的域(即$9、$15 以及$7)。

三、其他拓展

①、如果你之前没有做过 Nginx 日志切割,那么可以直接用下面这个脚本来一次性搞定:

#!/bin/bash
#Desc: Cut Nginx Log and Create Death Chain File
#Author: ZhangGe
#Blog: http://zhangge.net/5038.html
#Date: 2015-05-03
 
#①、初始化变量:
#定义access日志存放路径
LOGS_PATH=/home/wwwlogs
 
#定义蜘蛛UA信息(默认是百度蜘蛛)
UA='+http://www.baidu.com/search/spider.html'
 
#定义网站域名(需要先给相应的网站以域名形式配置了nginx日志,比如zhangge.net.log)
DOMAIN=zhangge.net
 
#定义前一天日期
DATE=`date +%Y-%m-%d -d "1 day ago"`
 
#定义日志路径
logfile=/home/wwwlogs/zhangge.net_${DATE}.log
 
#定义死链文件存放路径
deathfile=/home/wwwroot/zhangge.net/death.txt
 
#定义网站访问地址
website=http://zhangge.net
 
#②、Nginx日志切割
mv ${LOGS_PATH}/${DOMAIN}.log ${LOGS_PATH}/${DOMAIN}_${DATE}.log
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
#可选功能: 自动删除30天之前的日志,可自行修改保存时长。
cd ${LOGS_PATH}
find . -mtime +30 -name "*20[1-9][3-9]*" | xargs rm -f
 
 
#③、网站死链生成(百度专用)
#分析日志并保存死链数据
for url in `awk -v str="${UA}" '$9=="404" && $15~str {print $7}' ${logfile}`
do
        grep -q "$url" ${deathfile} || echo ${website}${url} >>${deathfile}
done

②、其他 WEB 服务器,比如 Apache 或 IIS,只要参考脚本思路,修改成实际的路径或日志字段,同样可以写一个相同功能的 Shell 或 Batch 脚本,有需求的朋友自己去研究折腾吧!

好了,本文暂时就分享这么多,希望对你有所帮助!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

JIS-CTF靶机+Kioptrix靶机渗透

最近一直在down各种CTF靶机玩,本次分享的2个靶机因较基础,故合并成一篇文章发表,本文章仅为初学者练手学习使用,大神们勿喷,感谢各位大佬!

1544
来自专栏熊二哥

快速入门系列--MVC--01概述

虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入。其实就在MVC框架中有很多设计模式和设计思路的体现,例如Depende...

1956
来自专栏Seebug漏洞平台

TP-LINK 远程代码执行漏洞 CVE-2017-13772 趣谈

原文地址:https://www.fidusinfosec.com/tp-link-remote-code-execution-cve-2017-13772/ ...

3736
来自专栏公有云大数据平台弹性 MapReduce

EMR之HBASE集群参数调优与压测

HBase 是Hadoop生态里重要一员。对HBase的调优,对节约成本,提升用户体验有重要意义。

3114
来自专栏MixLab科技+设计实验室

设计师编程指南之Sketch插件开发 10 - skpm & webview

往期文章索引: 1 / 入门基本概念、page的相关操作 2 / artboard 、NSFileManager 和 NSString 关于文件及文件夹的相关操...

4587
来自专栏程序员叨叨叨

compileSdkVersion 'android-24' requires JDK 1.8 or later to compile

今天,好久没有写Android程序的我突发奇想,想简单写一个每日任务APP。好的!新建工程->写好代码框架->开启模拟器->运行!哎哎哎?!那啥!咋报错了嘞?!...

1214
来自专栏AhDung

弹出移动设备时报正在使用肿么办

当确信没有程序在占用该设备时,这种提示让我觉得很操蛋,NTM说明白点会死啊~好吧,这时还不忍心直接拔的童鞋可以接着往下看:

1482
来自专栏LinXunFeng的专栏

iOS - 给高仿微信添加直播聊天功能

2213
来自专栏JackieZheng

利用Solr服务建立的站内搜索雏形---solr1

最近看完nutch后总感觉像好好捯饬下solr,上次看到老大给我展现了下站内搜索我便久久不能忘怀。总觉着之前搭建的nutch配上solr还是有点呆板,在nutc...

3238
来自专栏数据和云

当SQL Server爱上Linux:AVAILABILITY_MODE 和 DataGuard 的实践差距

作者 | 张乐奕:Oracle ACE 总监,ACOUG (中国 Oracle 用户组)联合发起人。Oracle 数据库高可用解决方案与 Exadata 一体...

952

扫码关注云+社区

领取腾讯云代金券