介绍
您单击网页上的HTML链接多少次才能获得404未找到错误? 存在断开的链接,因为网页有时会随着时间的推移而移动或删除。 网站管理员的工作是在人类网络访问者或搜索引擎机器人之前找到那些断开的链接。 延迟更正问题会导致糟糕的用户体验,并可能对搜索引擎页面排名造成损失。
如果您的网站包含超过几页,手动检查每个单独的链接太劳动密集,但有许多工具可以自动执行该任务。 您可以使用基于网络的应用,例如Google网站站长工具和万维网联盟(W3C)提供的应用,但它们通常缺少更高级的功能。 如果你运行WordPress,你可以使用一个插件,但一些共享的网络托管公司禁止他们,因为他们运行在与网站相同的服务器,链接检查是资源密集型。
另一个选择是在单独的机器上使用基于Linux的程序。 这些措施包括通用网络爬虫也发现断开的链接(如wget
)和定制链接跳棋(如linkchecker
和klinkstatus
)。 它们是高度可定制的,并最大限度地减少对您的目标网站的响应时间的负面影响。
本教程介绍了如何使用wget
找到所有网站上的断开的链接,让您可以纠正。
先决条件
要遵循本教程,您需要:
两个Debian 7 Droplet,一个通用机上运行
wget
距离( 通用-1)和一个它承载您的网站(web服务器-1)。上的Sudo非root用户都通用-1和网络服务器-1。 点击这里进行说明。
Web服务器-1需要安装LAMP组合。 请点击这里了解相关说明。
可选地,web服务器可以具有其自己注册的域名。 如果是这样,请使用您的域名无论你看到
your_server_ip
。 请点击这里了解相关说明。
尽管本教程是Debian 7写的, wget
例子也应该在其他现代的Linux发行版上运行。 您可能需要安装wget
位置时默认情况下不包含其他发行。
第1步 - 创建示例页面
首先,我们将添加一个包含多个缺失链接的示例网页。
登录到Web服务器-1。 打开一个名为新文件spiderdemo.html
使用编辑nano
或您喜爱的文本编辑器。
sudo nano /var/www/spiderdemo.html
将以下内容粘贴到文件中。 这是一个非常简单的网页,包括两个断开的链接,一个内部(添加到您的服务器IP,在下面突出显示)和一个外部。
<html>
<head> <title>Hello World!</title> </head>
<body>
<p>
<a href="http://your_server_ip/badlink1">Internal missing link</a>.
<a href="https://www.digitalocean.com/thisdoesntexist">External missing link</a>.
</p>
</body>
</html>
保存并关闭文件。
接下来,文件所有者和组更改spiderdemo.html
到默认的Web服务器的用户, www-data
。
sudo chown www-data:www-data /var/www/spiderdemo.html
最后,更改新HTML文件的文件权限。
sudo chmod 664 /var/www/spiderdemo.html
现在你可以看到在示例页面http:// your_server_ip /spiderdemo.html
。
第2步 - 运行wget
wget
是一个通用的网站下载它也可以用作一个网络爬虫。 在这一步中,我们将配置wget
是否每个链接指向报告给现有页面或不下载该网页被打破。
注意:只有检查您自己的网站链接。 在网站上的链接检查导致显着的计算开销,因此这些活动可以被解释为垃圾邮件。
登录到通用-1和运行以下wget
命令。 每个标志的说明如下; 您可以根据您的用例修改此命令。
wget --spider -r -nd -nv -H -l 1 -w 2 -o run1.log http://your_server_ip/spiderdemo.html
以下是您需要的基本标志:
--spider
停止wget
从下载页面。-r
使得wget
递归按照页面上的每个环节。-nd
,简称--no-directories
,防止wget
从你的服务器(即使它被配置为只蜘蛛)上创建目录的层次结构。-nv
,简称--no-verbose
,停止wget
从输出的额外信息是不必要的识别损坏的链接。
以下是可选参数,您可以使用它们来自定义搜索:
-H
,简称--span-hosts
,使得wget
抓取子域,比主之一(即外部网站)等领域。-l 1
是短期的--level
。 缺省情况下,wget
检索到深从初始URL五个级别,但在这里我们将其设置为1。 您可能需要使用此参数,具体取决于您的网站的组织。-w 2
,简称--wait
,指示wget
等待请求之间2秒,避免轰击服务器,最大限度地降低任何性能影响。-o run1.log
节省wget
的输出到一个名为run1.log
,而不是在终端显示出来的。
你运行上面后wget
命令,使用以下命令提取输出文件损坏的链接。
grep -B1 'broken link!' run1.log
该-B1
参数指定,对于每一个匹配行, wget
的匹配前行领先的情况下显示一个额外的行。 此前一行包含断开的链接的URL。 下面是从上面的示例输出grep
命令。
http://your_server_ip/badlink1:
Remote file does not exist -- broken link!!!
https://www.digitalocean.com/thisdoesntexist:
Remote file does not exist -- broken link!!!
第3步 - 查找引荐来源网址
第2步会报告损坏的链接,但不会标识引荐来源网页,即您网站上包含这些链接的网页。 在此步骤中,我们会找到引荐来源网页。
通过检查网络服务器的访问日志,可以方便地识别引荐来源网址。 登录到Web服务器-1和搜索Apache日志为断开的链接。
sudo grep Wget /var/log/apache2/access.log | grep "HEAD /badlink1"
第一个grep
在上面的命令查找所有的访问请求wget
到Web服务器。 每个访问请求包括用户代理字符串,标识负责生成Web请求的软件代理。 用户代理*标识符wget
是Wget/1.13.4 (linux-gnu)
第二个grep
搜索断开的链接(的部分URL /badlink1
)。 所使用的部分网址是网域后面的网址部分。
从输出样本grep
命令链如下:
111.111.111.111 - - [10/Apr/2015:17:26:12 -0800] "HEAD /badlink1 HTTP/1.1" 404 417 "http://your_server_ip/spiderdemo.html" "Wget/1.13.4 (linux-gnu)"
引荐来源网址是上线的倒数第二个项目: http:// your_server_ip /spiderdemo.html
。
结论
本教程介绍了如何使用wget
工具查找网站上的断开的链接,以及如何找到包含这些链接引用页面。 您现在可以通过更新或删除任何损坏的链接进行更正。