我很確定很多人都想到了這一點,但出於某種原因,我無法使用Google和StackOverflow搜索找到它。使鏈接完全隱形?
我想製作一個不可見的鏈接(黑名單robots.txt)到一個CGI或PHP頁面,它將「陷阱」惡意機器人和蜘蛛。到目前爲止,我已經試過:
體內空鏈接:
<a href='/trap'><!-- nothing --></a>
這個工程相當不錯的大部分時間,有兩個小問題:
問題:該鏈接是文檔正文的一部分。儘管使用鼠標幾乎不可觸摸,但一些訪問者仍然無意中擊中了它,而鍵盤導航使用標籤和輸入。另外,如果他們將頁面複製粘貼到文字處理器或電子郵件軟件中,例如,陷阱鏈接被複制,有時甚至可以點擊(某些軟件不喜歡空的
<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,但我仍在尋找更有效的方法。
任何建議,或我錯過了另一個不同的解決方案?
如果某些客戶端沒有啓用JavaScript,該怎麼辦? – 2010-09-05 22:55:18
然後他們沒有看到鏈接,但有能夠選中鏈接的缺點。這不是100%修復,但我不認爲有很多客戶會選擇禁用javascript的不可見鏈接。 – 2010-09-05 22:57:55
這似乎是一個很好的解決方案!我並不十分擔心JavaScript的依賴性,因爲它隻影響兩個少數派(通過複製粘貼或標籤查找鏈接以及禁用腳本的那些人)的交集。你可以擴大你的答案,包括一個不依賴於jQuery的解決方案嗎?我認爲它應該涉及document.GetElementById()和node.parentNode.removeChild(),但我對JavaScript的使用經驗非常有限。 – Juliano 2010-09-05 23:21:32