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

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

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

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

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

www.mydomain.com/seo-friendly-url

Любая помощь очень ценится!

2 ответа

Решение

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

Часть "хэш" 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. замените его реализацией вашей библиотеки [если вы используете библиотеку])

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);
    }
}
Другие вопросы по тегам