Как правильно читать хэш 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);
}
}