如何在我的Web应用程序中实现联盟链接?

8

我使用Java EE平台构建了一个Web应用程序,用于销售我的软件。

现在我希望将推广网站的工作交给各种电子营销公司。但是由于我需要向他们支付佣金,因此我应该知道是谁发送了流量。

我认为解决上述问题的一种方法是:

为每个电子营销公司创建单独的URL,并向他们提供相应的URL,将所有这些URL重定向到单个Servlet。之后,计算特定URL(电子营销公司的URL)上的访问者数量,以计算由该电子营销公司引荐的访问者数量。

Google和其他各种公司使用类似的技术来区分彼此。

Q1. 所有公司都使用这种方法吗?

Q2. 是否有任何其他更好的方法可以完成此操作?

您还可以提供建议...

提前感谢您的帮助!


多个指向相同内容的链接可能会损害您的Google排名,因为这看起来像一个链接农场。 - Dominik
7个回答

2

1

我同意@krassib和@TomR的观点 - 使用queryString参数,然后您可以编写一个servlet过滤器来检查特定参数并增加该联盟的计数。使用servlet过滤器还可以为每个联盟基础上跟踪单个链接的计数,这是额外的好处。

您可以执行以下操作:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class AffiliateTrackingFilter implements Filter {
    private AffiliateTrackingService affiliateTrackingService = null;

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest rq, ServletResponse rs,
            FilterChain chain) throws IOException, ServletException {
        String affililateId = rq.getParameter("affiliateId");
        affiliateTrackingService.incrementAffiliateHit(affililateId);
        chain.doFilter();
    }

    @Override
    public void init(FilterConfig fc) throws ServletException {
        affiliateTrackingService = new AffiliateTrackingService();
    }
}

然后在你的 web.xml 文件中添加类似以下内容:

<filter>
    <filter-name>AffiliateTrackingFilter</filter-name>
    <filter-class>com.example.AffiliateTrackingFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>AffiliateTrackingFilter</filter-name>
    <servlet-name>MyMainServlet</servlet-name>
</filter-mapping>

并为所有的servlet设置一个过滤器映射。


@simonlord,一些来自搜索引擎的请求可能不包含联盟ID。那么解决方案是什么? - Amit
@Yatendra:来自搜索引擎的请求不应与联盟伙伴关联,因为联盟伙伴不负责将流量带到您的网站。也就是说,它们不需要包含联盟伙伴ID,因为它们不是来自联盟伙伴。 - Lawrence Dol
@软件猴子..我知道这个,这就是为什么我问上面的问题...实际上你解释错了或者我没有表达清楚...现在我从别人那里得到了答案...但还是感谢你花时间回答。 - Amit
@simonlord 上述解决方案在跟踪CPC,CPM等时非常完美。但是关于付款跟踪呢?如果用户购买了X产品,那么我只想支付佣金。大多数方法都涉及将信息存储在cookie中。但是我怎么知道有人购买了X产品呢? - Hrushi

1
关于aefxx关于片段标识符的回答,我认为这种方法的好处是保持SEO排名。如果是这样,您仍然可以使用查询字符串来管理它们,但必须在Google网站管理员工具中将它们设置为被忽略。我假设Bing和可能Yahoo有类似的机制。这样,您仍然可以基于查询字符串进行跟踪,实际上,如果您愿意,您还可以在Google Analytics(不跟踪片段标识符)中进行跟踪而无需自定义。

1

据我所知,有三种可能性:

  1. 如您所提到的,为每个公司设置唯一的URL,
  2. 使用“优惠券代码”,需要访问者输入。对于访问者来说有点烦人,但我见过类似的做法。
  3. 最后,只有在您提到的公司拥有网站并从那里放置链接时才有效:通过捕获引荐URL。

在我看来,最好的选择是第一种选项。这也可能是为什么这是最广泛使用/知道的原因。

您可能希望实现cookie来“记住”来自哪个公司的访问者,因此当访问者-在第一次访问时没有决定购买任何东西-返回并购买某些东西时,您将知道哪家公司向他们介绍了您的网站。


1

好的,这里还有一个方法。您可以使用锚点方法。让我解释一下:

假设http://myappz.com/fooshop_cs是销售产品的URL,并且这是您分发给联盟成员的内容,但每个成员都有所不同。您只需通过劫持fragment identifier(即http://myappz.com/fooshop_cs#em001)向URL添加唯一ID。

一旦用户跟随带有唯一ID的链接进入您的网站,您就可以使用Javascript检查ID的存在性(location.href.search(/#em\d*/))。找到ID后,您只需触发AJAX调用以提升该联盟成员的级别(我建议使用jQuery框架来完成此操作)。

这种方法的好处是搜索引擎不关心片段标识符,而且您将能够从单个页面销售产品。您的用户也不会在意,因为锚点对他们没有任何影响(除非您在页面内设置了锚标记)。

再见


0
与之前的答案非常相似 - 您可以为每个联盟网站提供一个唯一的密钥(在URL中),他们将提交该密钥。您的服务器应用程序将(解密并)将密钥与联盟网站列表进行匹配,并计算引导来源。

0

为什么不使用已经存在的东西呢?我指的是HTTP协议及其一个头部字段:Referrer(通常传递给环境变量HTTP_REFERER或HTTP_REFERRER中的代码)。

虽然它并不是100%防弹的(但再说,什么是100%防弹的呢?),但我认为在你的情况下它可能已经足够了。我假设你的客户与联盟有关,是从他们的网站之一转介的吗?如果是这样,那么你很容易区分来自不同电子营销公司的客户,因为每个公司都应该有自己的域名。

阅读更多关于 Referrer field的信息。请记住,引荐欺骗或隐藏是可能的,但非常不太可能(通过我的服务器日志文件估计,大约有95%的访问者发送引荐字段)。

此致敬礼。


我不能使用 Referrer 字段,因为我不打算限制电子营销公司拥有自己的网站(尽管在大多数情况下它们确实拥有)。这样,它们也可以将我的网站横幅广告放置在其他网站上。 - Amit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接