Google 如何掩盖搜索结果页面上链接的真实 URL?

Posted

技术标签:

【中文标题】Google 如何掩盖搜索结果页面上链接的真实 URL?【英文标题】:How does Google mask the real URLs of links on search results pages? 【发布时间】:2013-12-04 03:30:55 【问题描述】:

以下我在最新版本的Chrome和Firefox以及IE11上测试,结果都是一样的。

如果您进行 Google 搜索,然后将鼠标悬停在搜索结果页面上的链接上,则浏览器窗口左下角显示的链接与 a 元素的实际 href 不同. 在我测试过的所有三个浏览器中,如果你在元素检查器中检查链接,你可以很容易地看到真正的链接(即www.google.com),当检查器打开时,如果你再次将鼠标悬停在链接上,然后您会在浏览器窗口的左下角看到真正的 URL 链接。

我有两个关于这种行为的问题?

    虽然问起来可能有点天真,但 Google 为什么要这样做? Google 如何做到这一点?因为我在 Chrome、Firefox 和 IE11 中看到了这种行为,所以我认为这是一些 javascript 控制的行为(而不是一些浏览器控制的行为),但我从未听说这在 JavaScript 中是可能的。如果在 JavaScript 中是可能的,你是怎么做到的?

谢谢。

【问题讨论】:

当我在检查器打开的情况下将鼠标悬停在链接上时,我仍然在浏览器的角落看到www.google.com URL。 +1 为 Barmar。我看到了同样的行为。 是的,你们都是对的。正如我在 PoByPobel 的回答中评论的那样,起初我并没有想到右键单击链接打开检查会导致 onmousedown 事件发生,并且 rwt 函数被触发。感谢您指出这一点。 【参考方案1】:

当用户点击href时, onmousedown 事件处理程序被执行 在默认行为开始之前。 这个时间范围是用来改变锚标签的href。

查看他们代码的简化版本:

<a 
  href="https://www.google.com/" 
  data-href='https://www.yahoo.com/' 
  onmousedown="this.href = this.dataset.href"
>Link</a>

【讨论】:

【参考方案2】:

查看初始标记:

<a onmousedown="return rwt(this,'','','','3','AFQjCNF8xnW_qOvuZURbtcZUvB6zhKtRQw','35cXyZwuoZY8hBY1VfDr8Q','0CEAQFjAC','','',event)"
      href="http://en.wikipedia.org/wiki/How_Do_You_Do_It%3F">
   <em>How Do You Do It</em>? - Wikipedia, the free encyclopedia
</a>

最初,href 属性显示“真实”URL。但是当你点击链接时,rwt 函数将属性值更改为

http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&ved=0CEAQFjAC&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FHow_Do_You_Do_It%253F&ei=8nSMUqXtLKfe4QSzwIDADQ&usg=AFQjCNF8xnW_qOvuZURbtcZUvB6zhKtRQw&sig2=35cXyZwuoZY8hBY1VfDr8Q&bvm=bv.56643336,d.bGE

回答您的问题:当您单击链接时,他们使用onmousedown 属性来更改链接的href 属性。 Barmar 指出他们这样做的原因。

【讨论】:

啊哈,我没看到,因为我右键点击链接使用Inspect element,这改变了链接! 我也做了同样的事情。但在我看到onmousedown 属性后,我发现Google 已经更改了href 的值。所以我尝试了一个我还没有点击的链接;) @PoByBolek,非常感谢这个好答案。像 Barmar 一样,我没有考虑到当我右键单击链接打开检查时,会导致鼠标按下事件发生。感谢您指出这一点。现在这几乎都说得通了。不过,我仍然有一个相关的后续问题,我将其作为对 Barmar 答案的评论发布。谢谢。 如果在结果页面上禁用了 javascript,结果从一开始就使用跟踪 url(而不是原来的)【参考方案3】:

结果页面中的链接指向 Google 服务器上的重定向页面。他们这样做是为了跟踪人们点击了哪些链接。这比使用 Javascript 更可靠,因为它不需要用户启用 Javascript。

您可以在 URL 的 url 参数中看到链接的最终目标。

【讨论】:

跟踪链接的使用不需要 JavaScript,但您还没有解释它们如何使最终目标出现在状态栏中。 @ruakh 即使不能解决完整的问题,也可以提供部分答案——请参阅我的问题meta @Barmar,非常感谢您的解释。不过,我对您的回答有一个后续问题。您提到 Google 所做的一切都是为了跟踪目的,这是一种可靠的技术,因为有些用户没有启用 JavaScript,但如果用户禁用了 JavaScript,那么链接的 href 将永远不会更改,并且他们永远不会被定向到谷歌服务器,对吧?相反,它们将被直接带到实际的 URI,对吗?我只是想确保我没有误解任何事情。谢谢。 @HartleySan 理论上是的。但是 Google 不知何故注意到您禁用了 JavaScript,并且(神奇地)向您发送了不同的标记,其中所有 hrefs 都包含 Google 重定向 URL。 他们可能使用&lt;noscript&gt; 来检测。

以上是关于Google 如何掩盖搜索结果页面上链接的真实 URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在网站上获取 Google 附加链接? [关闭]

谷歌和雅虎如何替换浏览器状态栏中的 URL?

google怎么做(3.搜索结果重排序)

如何掩盖图像中的分割区域?

如何使用自定义搜索来获取 html 文件中的数据?

Hexo提交百度和Google收录站点