Как правильно прочитать хэш Javascript в пользовательском партнерском URL?

Я создаю пользовательскую партнерскую программу. Я хочу, чтобы мои ссылки были максимально оптимизированы для SEO, поэтому я буду использовать хэш Javascript, добавленный к URL-адресу, чтобы отправить идентификатор партнера, прочитать идентификатор партнера, сохранить клик, а затем перенаправить 301 на страницу, на которую они были связаны. слишком. Таким образом, у нас нет никаких канонических проблем, и каждая партнерская ссылка передает ссылочный вес!

Теперь, как мне прочитать следующий URL?

www.mydomain.com/seo-friendly-url#ref=john

После получения хеш-значения для ref и добавления клика, как мне затем 301 перенаправить пользователя обратно на

www.mydomain.com/seo-friendly-url

Любая помощь приветствуется!


person PaperChase    schedule 23.09.2011    source источник


Ответы (2)


Идентификаторы фрагментов (часть после #) не отправляются на сервер, поэтому они не могут быть прочитаны чем-либо, что могло бы затем отправить ответ HTTP (который вам нужен для перенаправления 301).

person Quentin    schedule 23.09.2011
comment
Я пытался использовать обычные переменные, такие как www.mydomain.com/seo-friendly-url?ref=john, но по какой-то причине они не читаются моим скриптом phpaffilicheck. Это потому, что я использую дружественные к SEO URL-адреса, которые отправляются htaccess? - person PaperChase; 24.09.2011

«Хэш»-часть URL-адреса не передается на сервер, поэтому вы не сможете использовать эти данные для какого-либо перенаправления или обработки на стороне сервера напрямую. Однако можно получить хэш при загрузке страницы и передать его на сервер через AJAX или перенаправление:

Чтобы немедленно перенаправить пользователя с www.mydomain.com/seo-friendly-url#ref=john на www.mydomain.com/seo-friendly-url/ref/john

if (window.location.hash.match(/#ref=/))
    window.location = window.location.href.replace('#ref=', '/ref/')

... но тогда почему бы просто не использовать www.mydomain.com/seo-friendly-url/ref/john для начала и сэкономить дополнительную работу? Другой маршрут, через AJAX, включает в себя чтение значения хеша после загрузки страницы и отправку его на сервер для записи.

(примечание: этот код использует общий кросс-браузерный запрос XMLHTTPRequest для отправки AJAX GET request. замените реализацией вашей библиотеки [если вы используете библиотеку])

window.onload = function () {
    // grab the hash (if any)
    var affiliate_id = window.location.hash;
    // make sure there is a hash, and that it starts with "#ref="
    if (affiliate_id.length > 0 && affiliate_id.match(/#ref=/)) {
        // clear the hash (it is not relevant to the user)
        window.location.hash = '';
        // initialize an XMLRequest, send the data to affiliate.php
        var oXMLHttpRequest = new XMLHttpRequest; 
        oXMLHttpRequest.open("GET", "record_affiliate.php?affiliate="+affiliate_id, true);
        oXMLHttpRequest.onreadystatechange = function() { 
            if (this.readyState == XMLHttpRequest.DONE) { 
                // do anything else that needs to be done after recording affiliate
            } 
        }
        oXMLHttpRequest.send(null);
    }
}
person Chris Baker    schedule 23.09.2011