代码之家  ›  专栏  ›  技术社区  ›  Juliano

使链接完全不可见?

  •  9
  • Juliano  · 技术社区  · 14 年前

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

    1. 正文中的空链接:

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

      这在大多数情况下都非常有效,但有两个小问题:

      问题: . 此外,如果他们将页面复制粘贴到文字处理器或电子邮件软件中,例如,陷阱链接会被复制,有时甚至可以单击(有些软件不喜欢空的) <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并忽略注释。我个人见过一些机器人,它们使用internetexplorercom/ActiveX对象来解析(X)HTML,并通过XPath或Javascript提取所有链接。这些类型的机器人不会被诱骗到跟随陷阱超链接。

    2 回复  |  直到 14 年前
        1
  •  12
  •   Sander Rijken    14 年前

    像你说的那样加上:

    <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);
    
        2
  •  2
  •   cmptrwhz    14 年前

    你可以创建一个这样的隐藏链接,并把它放在页面的左上角,为了防止普通用户太容易访问它,你可以使用css在这个图像上放置一个logo图像。

    <a href="/bottrap.php"><img src="images/pixel.gif" border="0" alt=" " width="1" height="1"></a> 
    

    如果你有兴趣设置如何黑名单的机器人,请参阅此链接详细解释如何。

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