SEO - Статьи Как убрать из трафика реферер?

Discussion in 'SЕО - тонкости, методы раскрутки' started by Anwy, 24 Mar 2015.

  1. Anwy

    Anwy Elder - Старейшина

    Joined:
    16 Dec 2004
    Messages:
    265
    Likes Received:
    232
    Reputations:
    45
    Совсем недавно на форуме был вопрос о том, Убрать из трафа реферер (или заменить)

    Решил выложить несколько способов, проверенных мною.


    Таки есть несколько способов.

    Самый простой вариант. Рефреш-мета в заголовке страницы с нулевым таймаутом.

    PHP:
    <html>
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <
    meta name="robots" content="noindex, nofollow">
    <
    meta http-equiv="refresh" content="0; url='http://anwy.ru/ref.php'">
    </
    head>
    </
    html>

    Фрейм
    Представляет собой редирект из фрейма.

    PHP:
    <html>
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </
    head>
    <
    body>
    <
    iframe src="javascript:parent.location='http://anwy.ru/ref.php'" style="visibility:hidden">
    </
    iframe>
    <
    script>
        var 
    0
        
    function go() { location.replace("http://anwy.ru/ref.php") }
        
    window.setTimeout('go()'5000)
    </script>
    </body>
    </html>
    Сабмит формы
    Очень хитрый вариант с сабмитом пустой формы из фрейма.
    PHP:

    <html>
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </
    head>
    <
    body>
    <
    script>
        var 
    0
        
    function go2() { location.replace("http://anwy.ru/ref.php") }
        function 
    go() {
            if(
    x) return
            
    += 1
            
    try {
                var 
    html '<form target="_parent" action="http://ejz.ru/ref.php">'
                
    html += '<input type="hidden" name="u" value="" /></form>'
                
    window.frames[0].document.body.innerHTML html
                window
    .frames[0].document.forms[0].submit()
            } catch(
    e) {
                
    go2()
            }
        }
    </script>
    <iframe onload="window.setTimeout('go()', 99)" src="about:blank" style="visibility:hidden">
    </iframe>
    <script>window.setTimeout('go2()', 3333)</script>
    </body>
    </html>
    flash
    Редирект совершает флеш-объект (ссылка ему передается параметром).

    PHP:
    <html>
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </
    head>
    <
    body>
    <
    embed src="/r.swf?u=http%3A%2F%2Fanwy.ru%2Fref.php" width="1" height="1" type="application/x-shockwave-flash">
    <
    script>window.setTimeout('location.replace("http://anwy.ru/ref.php")'5000)</script>
    </embed>
    </body>
    </html>
    PS. Совсем недавно появился еще один способ от kaimi / DX

    На данный момент, наверное, самый универсальный.
    За что им спасибо.

    В различного рода работе (партнерки, лендинги и т.п.) нередко возникает вопрос - как переадресовать пользователя на другую веб-страницу, при этом чтобы его браузер не передавал HTTP Referer. В Интернете существует множество сервисов, которые просто заменяют Referer на свой собственный адрес, но это тоже не всегда желаемо. Так как же получить пустой Referer?
    Есть один самый надежный путь:
    1. Переадресовываем пользователя на HTTPS-адрес.
    2. Далее, если целевой адрес HTTP, то переадресовываем туда.
    3. Иначе, переадресовываем на наш HTTP-адрес, а оттуда уже на целевой.
    Эта схема гарантированно очистит Referer, однако, она достаточно муторная и иногда требует нескольких редиректов.
    Если же у вас нет возможности организовывать такую схему, или вы просто не хотите слишком париться на этот счет, или даже просто интересуетесь, какие есть еще способы, то эта заметка для вас. Я расскажу, как получить максимально кроссбраузерное решение, которое переадресует пользователя на целевую страницу с пустым реферером.
    Разумеется, совершить редирект, отослав браузеру заголовок (с кодом 301 или 302, например) не получится, так как браузер в этом случае удержит реферер, но не обнулит его, и даже не изменит. Придется делать решение, совмещающее в себе различные подходы. Итак, сначала я приведу код, а потом - пояснения по нему.

    PHP:
    <?php
    //Ваша ссылка, на которую осуществляется редирект
    $target_link 'http://google.com';
     
    if(!isset(
    $_SERVER['HTTP_REFERER']))
    {
        
    //Если нам никто реферер не передал, то достаточно
        //просто совершить 301 редирект - браузер при этом реферера навешивать
        //не будет
     
        //Неплохо бы еще проверить, если у нас редирект с HTTPS на HTTP, то также
        //осуществляем 301 редирект через header(), так как браузер
        //в таком случае не передаст реферер, но эту простую задачку
        //я оставлю вам.
        
    header('Location: ' $target_linktrue301);
        exit();
    }
     
    //А иначе всё не так просто
    $target_link htmlspecialchars($target_link);
     
    //Будем делать редирект через тег <meta>.
    //Это срабатывает в Firefox и IE, однако, в других браузерах не работает.
     
    //В то же время, браузеры на движке WebKit
    //(Safari, Chrome, новая Opera) поддерживают
    //атрибут rel="noreferrer" у тегов <a>
    $is_webkit = isset($_SERVER['HTTP_USER_AGENT'])
        && 
    strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'webkit') !== false;
    if(
    $is_webkit)
    {
        
    //Ставим таймаут редиректа через тег <meta> в 3 секунды
        //(на тот случай, если в браузере выключен JavaScript).
        //Это, конечно, не удалит реферера, зато заменит его
        //на URL этого скрипта и переадресует пользователя
        //на целевую страницу.
        
    $meta_timeout 3;
        
    //Пробуем осуществить редирект с помощью JavaScript.
        //(Это очищает Referer).
        
    $onload 'onload="redirect();"';
    }
    else
    {
        
    //Firefox и IE и так не шлют реферер при редиректе через
        //тег <meta>, поэтому нам не нужны извращения через JavaScript.
        
    $meta_timeout 0;
        
    $onload '';
    }
     
    echo <<<HERE
    <!doctype html>
    <html>
        <head>
            <meta http-equiv="X-UA-Compatible" content="IE=edge" />
            <meta http-equiv="cache-control" content="max-age=0" />
            <meta http-equiv="cache-control" content="no-cache" />
            <meta http-equiv="expires" content="0" />
            <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
            <meta http-equiv="pragma" content="no-cache" />
            <meta http-equiv="refresh" content="
    $meta_timeout;url=$target_link">
            <title></title>
            <script type="text/javascript">
            <!--
            var redirect = function()
            {
                document.getElementById("link").click();
            }
            -->
            </script>
        </head>
        <body 
    $onload>
            <a href="
    $target_link" rel="noreferrer" id="link"></a>
        </body>
    </html>
    HERE;
    Много комментариев дано прямо в коде, но я поясню поподробнее. В скрипте скомбинировано два разных подхода к переадресации в зависимости от браузера:
    1. META-редирект. Хорошо работает в Firefox и IE, очищая поле Referer.
    2. Редирект через JavaScript методом программного клика по ссылке с атрибутом rel="nofollow". Это работает в последних версиях браузеров, основанных на движке WebKit (Chrome, Safari, новая Opera). На случай, если JavaScript отключен, через 3 секунды будет осуществлен META-редирект. Это не очистит поле Referer в перечисленных браузерах, но, как минимум, заменит его и в любом случае осуществит переадресацию.
     
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Для каких браузеров проверялись первые 3 варианта? В опере не работает.
     
  3. Anwy

    Anwy Elder - Старейшина

    Joined:
    16 Dec 2004
    Messages:
    265
    Likes Received:
    232
    Reputations:
    45
    Хром. А какая версия оперы?
     
  4. spee_ua

    spee_ua New Member

    Joined:
    24 Feb 2017
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    сорян за нубский вопрос. точнее два:
    - пп за такие штуки не побанит?
    - UTM-метки теряются?