介绍
您多少次点击网页上的HTML链接只是为了获得404 Not Found错误?存在断开的链接,因为网页有时会随时间移动或删除。网站管理员的工作是在人类网络访问者或搜索引擎机器人之前找到那些损坏的链接。延迟纠正问题会导致糟糕的用户体验以及搜索引擎页面排名可能受到的损失。
如果您的网站包含多个页面,则手动检查每个链接会变得过于劳动密集,但有许多工具可以自动执行该任务。您可以使用基于网络的应用,例如Google网站站长工具和万维网联盟(W3C)提供的应用,但它们通常缺少更多高级功能。如果您运行WordPress,您可以使用插件,但是一些共享的Web托管公司禁止它们,因为它们与网站在同一服务器上运行,并且链接检查是资源密集型的。
另一种选择是在单独的机器上使用基于Linux的程序。这些包括一般网络抓取工具,也可以发现断开的链接(如wget
)和自定义链接检查器(如linkchecker
和klinkstatus
)。它们具有高度可定制性,可最大限度地减少对目标网站响应时间的负面影响。
本教程将介绍如何使用它wget
来查找网站上所有已损坏的链接,以便您更正这些链接。
要学习本教程,您需要:
wget
的通用机器和一个托管你的网站(webserver-1)的机器。sudo
命令的非root账号的Debian 7服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。)your_server_ip
。虽然本教程是为Debian 7编写的,但这些wget
示例也应该在其他现代Linux发行版上运行。您可能需要wget
在默认情况下未包含的其他发行版上安装。
首先,我们将添加一个包含多个缺失链接的示例网页。
登录webserver-1。使用nano
或您喜欢的文本编辑器打开一个名为spiderdemo.html
的新文件用于编辑。
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.qq.com">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
您现在可以在以下位置查看示例页面: your_server_ip/spiderdemo.html
wget
是一个通用的网站下载程序,也可以用作网络爬虫。在此步骤中,我们将配置wget
为报告每个链接是指向现有页面还是在不下载页面的情况下中断。
注意:仅检查您拥有的网站上的链接。网站上的链接检查会产生大量的计算开销,因此这些活动可能会被解释为垃圾邮件。
登录generic-1并运行以下wget
命令。每个标志的说明如下; 您可以为您的用例修改此命令。
wget --spider -r -nd -nv -H -l 1 -w 2 -o run1.log
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爬到最多五个级别,但在此我们将其设置为一个。您可能需要使用此参数,具体取决于您网站的组织。-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.qq.com/thisdoesntexist:
Remote file does not exist -- broken link!!!
第2步报告损坏的链接,但不识别引荐来源网页,即您网站上包含这些链接的网页。在此步骤中,我们将找到引荐来源网页。
识别引荐来源URL的便捷方法是检查Web服务器的访问日志。登录到webserver-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
)。使用的部分URL是域后面的URL的一部分。
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)"
引荐来源网址是该行的倒数第二项:your_server_ip/spiderdemo.html
本教程介绍如何使用该wget
工具查找网站上损坏的链接,以及如何查找包含这些链接的引荐来源页面。您现在可以通过更新或删除任何损坏的链接进行更正。
更多Debian教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Find Broken Links on Your Website Using Wget on Debian 7》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。