【问题标题】:Programmatically determine if user arrived via an AdWords link以编程方式确定用户是否通过 AdWords 链接到达
【发布时间】:2017-06-23 22:22:02
【问题描述】:

如果最终用户通过 AdWords 链接到达,我想更改向他们显示的我网站的电子邮件地址。作为广告商,我的基本理解是 Google 会检查一个 cookie 来注册“转换”操作,所以我想知道是否可以使用客户端 JavaScript 以编程方式检查它?

我知道,一般来说,您可以通过 AdWords 本身将一些数据附加到目标网址,但我担心当他们移动到另一个内部页面时这些数据会消失。那么,如果我显示的电子邮件地址从info@example.com 变为adwords@example.com,那么一旦用户导航到网站上的另一个页面,它就会变回来?

我正在跟踪mailto: 链接上的点击事件,但我注意到一些潜在客户必须手动复制/粘贴或键入显示的电子邮件地址,因为在 AdWords 中没有相应的转化这些电子邮件线索。

我希望能够在页面加载时运行一些脚本并说如下内容:

if (adwordsVistor) {
  $('.email-link').html('adwords@example.com');
}

我知道 AdWords 本身会为 Google 转接号码(它使用他们的一些 JavaScript 更改您网站上的任何电话链接)执行此操作,所以我有点想知道是否可以为电子邮件地址创建类似的功能。

【问题讨论】:

  • 您是否尝试过查看document.referrerw3schools.com/jsref/prop_doc_referrer.asp
  • 我对此进行了测试,结果只是显示google.com,这可能是自然的或 AdWords,因此没有净收益。

标签: javascript cookies


【解决方案1】:

诚然,我对 AdWords 一无所知。然而,从 javascript 编程的角度来看,这应该不难。

我知道,一般来说,您可以通过 AdWords 本身将一些数据附加到目标网址

做了一些研究,我发现了这篇文章Intro to UTM Parameters and Best Practices。这将我引向 Google 的文章 Custom campaigns

我们可以包含五个 UTM 参数,其中三个是必需的。 设置完成后,我们可以通过两种基本方式使用它们来跟踪访问者在离开着陆页后是通过 AdWords 本身访问的事实。

  1. 在服务器上捕获传入的 UTM 参数并设置一个 SESSION 值,让所有其他页面在请求时知道此“访问”是由通过 AdWords 访问网站的用户开始的(SESSION 值取决于您使用的服务器技术正在使用,但有据可查)。

    此时(同样取决于服务器技术)我们可以在将页面源发送到浏览器之前修改我们所有的联系电子邮件地址(或其他任何内容)。这意味着该会话的页面的实际源中永远不会出现任何其他版本的电子邮件地址(无法“查看页面源”并查看电子邮件地址曾经是什么)。

  2. 在浏览器中捕获传入的 UTM 参数并使用 javascript 来“记住”访问是通过 AdWords 开始的,并相应地修改电子邮件地址。由于这是您要求的,因此此答案的其余部分将重点介绍此方法。

Javscipt 答案

第 1 步:

从 URL 中获取 UTM 参数。

为此,我们将使用URLSearchParams API。 Safari、Edge 和 IE 的稳定版本有一个polyfill。由于 utm_campaign 是必需参数,因此我们可以依靠它的存在(或不存在)来了解访问者是否通过 AdWords 到达这里,如下所示:

var params = new URLSearchParams(location.search),
    adwordsVistor = !!params.get('utm_campaign'); // adwordsVistor is now a boolean

现在您的 if 声明有效:

if (adwordsVistor) {
    $('.email-link').html('adwords@example.com');
}

但是所有其他页面呢?

第 2 步:

“记住”adwordsVistor 的状态。

为此,我们将使用Document.cookie。我们将设置一个 cookie 来记住 adwordsVistor 的状态,如下所示:

document.cookie = 'adwordsVistor=' + adwordsVistor;

由于我们没有在 cookie 上设置过期时间,它是一个会话 cookie,将在浏览器关闭时被删除。这很重要,因为我们可能想知道用户是否不是通过 AdWords 回来的。

第三步:

正在检索 cookie。

有很多帖子讨论在 javascript 中使用 cookie。对于此示例,我们将使用此 post 中的简单 getCookie 函数。

第 4 步:TLDR;

把它们放在一起。

现在我们已经有了所有的部分,让我们把它们放在一起。将以下代码放入每个页面中包含的 javascript 文件或脚本块中。 还要确保包含上面提到的URLSearchParams polyfil(以便我们在比尔叔叔的 IE 中工作)。

function getCookie(name) {
    var start = document.cookie.indexOf(name + "="),
        len = start + name.length + 1;

    if ((!start) && (name != document.cookie.substring(0, name.length))) {
        return null;
    }

    if (start == -1) return null;

    var end = document.cookie.indexOf(';', len);

    if (end == -1) end = document.cookie.length;

    return unescape(document.cookie.substring(len, end));
}

$(function() {
    var params = new URLSearchParams(location.search),
        avCookie = getCookie('adwordsVistor'),
        adwordsVistor = !!params.get('utm_campaign') || !!avCookie; // adwordsVistor is now a boolean

    document.cookie = 'adwordsVistor=' + adwordsVistor;
    if (adwordsVistor) {
        switch(avCookie) {
            case 'campaign_1':
                $('.email-link').html('campaign_1@example.com');
                break;
            case 'campaign_2':
                $('.email-link').html('campaign_2@example.com');
                break;
            default:
                $('.email-link').html('adwords@example.com');
        }
    }
});

编辑:

为不同的活动

添加了不同的电子邮件

【讨论】:

  • 有趣!我刚刚发现 AdWords 设置了第三方 cookie。所以,要做我想做的事,我们基本上可以使用登录页面查询字符串,并在检测时设置第一方 cookie?如果我希望它与第三方一样持续(30 天),我们只需将调用修改为 document.cookie(),对吗?
  • @armadadrive 是的,设置“第一方 cookie”就是该示例所做的。是的,对document.cookie 的调用会发生变化,因为您可以在 cookie 上设置过期信息,时间长短不限(30 天、1 年等)。
  • 如果您确切地知道自己在寻找什么,那么您可以做很多事情。我根据几个关键概念设计了示例:1)“第三方”设置的信息会随着时间的推移而发生变化并且不可靠。使用我们控制的信息。 2) 使用 AdWords 的“自定义广告系列”。您可以为“utm_campaign”设置不同的值,允许您根据活动更改电子邮件(不同活动的电子邮件不同)。 3) 如果我们得到重复访问,我们可能想知道他们是不是通过 AdWords 回来的。这意味着他们喜欢他们所看到的并回来了。
  • @armadadrive 我在示例中添加了使用不同的广告系列。我很高兴能提供帮助。我必须了解 AdWords。我从未使用过它们。
猜你喜欢
  • 2011-07-20
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 2012-06-29
相关资源
最近更新 更多