David Thielen
David Thielen

Reputation: 32924

How can I determine if the document.referrer is from my own site?

Each time a page is requested I get the referrer of the page it came from. I need to track just referrer from other sites, I don't want to track going from one page to another within my site. How can I do that?

Upvotes: 18

Views: 24443

Answers (5)

If pages of “the same website” you think have the same origin (the same protocol, host, and port.),

URL syntax diagram

check it this way:

function the_referrer_has_the_same_origin() {
    try {
        const referrer = new URL(document.referrer);
        return (referrer.origin === location.origin);
    } catch(invalid_url_error) {
        return false;
    }
}
// Works as intended for `https://www.google.com` and `https://www.google.com:443`.

.

If you’d like a short one and not to consider unlikely situations, try this:

document.referrer.startsWith(location.origin)
// Fails for `https://www.google.com` and `https://www.google.com:443`.

.

Upvotes: 0

user9122500
user9122500

Reputation:

document.referrer.includes(location.host);

Upvotes: -2

mohamed-ibrahim
mohamed-ibrahim

Reputation: 11137

Solutions presented works in case of no sub domain in website in case of sub domain is there then we have to check just before the domain itself if any sub domains presented:

document.referrer.replace("http://", '').replace("https://", '').split('/')[0].match(new   RegExp(".*" +location.host.replace("www.", '')))

this solution will add .* before the domain to detect that sub domain is from same domain.

Upvotes: 0

Eli Grey
Eli Grey

Reputation: 35840

document.referrer.indexOf(location.protocol + "//" + location.host) === 0;

Upvotes: 43

David Thielen
David Thielen

Reputation: 32924

Originally posted at JavaScript - Am I the Referrer?

When someone comes to our website for the first time, we store the referrer in a cookie. This way, if they download our demo, we can get the original referrer from the cookie and we learn what sites are effective in driving leads to us.

Of course, every subsequent page a visitor hits on our website will show the referrer as our website. We don't want those. What we first did to avoid this was look for the text "windward" in the referrer and if so, assume that was from our site. The problem with this is we found a lot of referrer urls now have windward in them, either as a search term or part of a url that talks about Windward. (This is good news, it means we are now a well known product.)

So that brought me to our most recent approach. This should work for any site and should only reject referrers from the same site.

function IsReferredFromMe()
{

    var ref = document.referrer;
    if ((ref == null) || (ref.length == 0)) {
        return false;
    }
    if (ref.indexOf("http://") == 0) {
        ref = ref.substring(7);
    }
    ref = ref.toLowerCase();

    var myDomain = document.domain;
    if ((myDomain == null) || (myDomain.length == 0)) {
        return false;
    }
    if (myDomain.indexOf("http://") == 0) {
        myDomain = myDomain.substring(7);
    }
    myDomain = myDomain.toLowerCase();

    return ref.indexOf(myDomain) == 0;
}

Upvotes: 1

Related Questions