我很确定很多人都想过这个,但由于某些原因我无法使用Google和StackOverflow搜索找到它.
我想将一个看不见的链接(由robots.txt列入黑名单)到一个CGI或PHP页面,它将"陷阱"恶意机器人和蜘蛛.到目前为止,我已经尝试过:
身体中的空链接:
这大部分时间都很好用,有两个小问题:
问题:链接是文档正文的一部分.即使用鼠标几乎无法点击,一些访问者仍然无意中击中了键盘 - 用Tab和导航网站Enter.此外,如果他们将页面复制粘贴到文字处理器或电子邮件软件中,例如,陷阱链接被复制,有时甚至可以点击(某些软件不喜欢空标签并将href复制为文本的内容)标签).
体内隐形块:
这解决了键盘导航的问题,至少在我测试的浏览器中.从页面的正常显示中有效地无法访问该链接,而对于大多数具有当前智能水平的蜘蛛机器人仍然完全可见.
问题:链接仍然是DOM的一部分.如果用户复制粘贴页面的内容,则会再次出现.
内部评论栏:
这有效地从页面的DOM中删除了链接.从技术上讲,注释仍然是DOM的一部分,但它实现了合规用户代理不会生成A元素的预期效果,因此它不是实际链接.
问题:现在大多数蜘蛛机器人都足够聪明,可以解析(X)HTML并忽略评论.我个人看到机器人使用Internet Explorer COM/ActiveX对象来解析(X)HTML并通过XPath或Javascript提取所有链接.这些类型的机器人不会陷入跟踪陷阱超链接.
直到昨晚我才使用方法#3,当时我被一群机器人击中,这些机器人似乎对他们所遵循的链接非常有选择性.现在我回到方法#2,但我仍然在寻找一种更有效的方法.
我错过了任何建议,或其他不同的解决方案?
像你说的那样添加它:
然后用javascript/jQuery删除它:
$('#trap').remove();
垃圾邮件机器人不会执行javascript并看到该元素,几乎任何浏览器都会删除该元素,因此无法点击它
编辑:最简单的非jQuery方式是:
然后用javascript删除它:
var parent = document.getElementById('trapParent'); var child = document.getElementById('trap'); parent.removeChild(child);