我很确定很多人都想过这个,但由于某些原因我无法使用Google和StackOverflow搜索找到它。
我想将一个看不见的链接(由robots.txt列入黑名单)到一个CGI或PHP页面,它将“陷阱”恶意机器人和蜘蛛。到目前为止,我已经尝试过:
正文中的空链接:
<a href='/trap'><!-- nothing --></a>
这在大多数情况下效果很好,有两个小问题:
问题:该链接是文档正文的一部分。尽管使用鼠标几乎无法点击,但是一些访问者在使用 Tab 和 Enter 键盘导航网站时仍会无意中击中它。此外,如果他们将页面复制粘贴到文字处理器或电子邮件软件中,例如,陷阱链接被复制,有时甚至可以点击(某些软件不喜欢空的<a>
标签并复制href作为标签的内容。)
身体内的隐形块:
<div style="display:none"><a href='/trap'><!-- nothing --></a></div>
这解决了键盘导航的问题,至少在我测试过的浏览器中是这样。该页面的正常显示实际上无法访问该链接,而大多数蜘蛛机器人仍能完全看到其当前的智能水平。
问题:该链接仍然是DOM的一部分。如果用户复制粘贴页面内容,则会再次出现。
内部评论栏:
<!-- <a href='/trap'>trap</a> -->
这有效地从页面的DOM中删除了链接。好吧,从技术上讲,注释仍然是DOM的一部分,但它实现了合规用户代理不会生成A元素的预期效果,因此它不是实际链接。
问题:现在大多数蜘蛛机器人都足够聪明,可以解析(X)HTML并忽略评论。我个人看到机器人使用Internet Explorer COM / ActiveX对象来解析(X)HTML并通过XPath或Javascript提取所有链接。这些类型的机器人不会被欺骗跟踪陷阱超链接。
直到昨晚我才使用方法#3,当时我被一群机器人击中,这些机器人似乎真正选择了他们所遵循的链接。现在我回到方法#2,但我仍然在寻找一种更有效的方法。
我错过了任何建议或其他不同解决方案?
答案 0 :(得分:12)
像你说的那样添加它:
<a id="trap" href='/trap'><!-- nothing --></a>
然后用javascript / jQuery删除它:
$('#trap').remove();
垃圾邮件机器人不会执行javascript并看到该元素,几乎所有浏览器都会删除该元素,因此无法使用Tab键进行搜索
编辑:最简单的非jQuery方式是:
<div id="trapParent"><a id="trap" href='/trap'><!-- nothing --></a></div>
然后使用javascript删除它:
var parent = document.getElementById('trapParent');
var child = document.getElementById('trap');
parent.removeChild(child);
答案 1 :(得分:2)
这个解决方案对我来说似乎很有用,幸运的是我已经为它添加了书签。我希望它对你有帮助。
您可以创建一个这样的隐藏链接并将其放在页面的最左上方,并且为了防止普通用户太容易访问它,您可以使用css在此图像上放置徽标图像。
<a href="/bottrap.php"><img src="images/pixel.gif" border="0" alt=" " width="1" height="1"></a>
如果您有兴趣设置如何将黑名单设置为黑名单,请参阅此链接以详细说明方法。