使链接完全不可见?

时间:2010-09-05 22:40:06

标签: html hyperlink web-crawler

我很确定很多人都想过这个,但由于某些原因我无法使用Google和StackOverflow搜索找到它。

我想将一个看不见的链接(由robots.txt列入黑名单)到一个CGI或PHP页面,它将“陷阱”恶意机器人和蜘蛛。到目前为止,我已经尝试过:

  1. 正文中的空链接:

    <a href='/trap'><!-- nothing --></a>
    

    这在大多数情况下效果很好,有两个小问题:

    问题:该链接是文档正文的一部分。尽管使用鼠标几乎无法点击,但是一些访问者在使用 Tab Enter 键盘导航网站时仍会无意中击中它。此外,如果他们将页面复制粘贴到文字处理器或电子邮件软件中,例如,陷阱链接被复制,有时甚至可以点击(某些软件不喜欢空的<a>标签并复制href作为标签的内容。)

  2. 身体内的隐形块:

    <div style="display:none"><a href='/trap'><!-- nothing --></a></div>
    

    这解决了键盘导航的问题,至少在我测试过的浏览器中是这样。该页面的正常显示实际上无法访问该链接,而大多数蜘蛛机器人仍能完全看到其当前的智能水平。

    问题:该链接仍然是DOM的一部分。如果用户复制粘贴页面内容,则会再次出现。

  3. 内部评论栏:

    <!-- <a href='/trap'>trap</a> -->
    

    这有效地从页面的DOM中删除了链接。好吧,从技术上讲,注释仍然是DOM的一部分,但它实现了合规用户代理不会生成A元素的预期效果,因此它不是实际链接。

    问题:现在大多数蜘蛛机器人都足够聪明,可以解析(X)HTML并忽略评论。我个人看到机器人使用Internet Explorer COM / ActiveX对象来解析(X)HTML并通过XPath或Javascript提取所有链接。这些类型的机器人不会被欺骗跟踪陷阱超链接。

  4. 直到昨晚我才使用方法#3,当时我被一群机器人击中,这些机器人似乎真正选择了他们所遵循的链接。现在我回到方法#2,但我仍然在寻找一种更有效的方法。

    我错过了任何建议或其他不同解决方案?

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> 

如果您有兴趣设置如何将黑名单设置为黑名单,请参阅此链接以详细说明方法。

http://www.webmasterworld.com/apache/3202976.htm