Подтвердить что ты не робот

Перенаправление 301 с хэш-частью (якорем) #

Один из наших веб-сайтов имеет URL-адрес: example.oursite.com. Мы решили переместить наш сайт с таким URL-адресом www.oursite.com/example. Чтобы сделать это, мы написали правило перезаписи на нашем сервере Apache, которое перенаправляет наш новый URL с кодом 301.

Многие веб-сайты ссылаются на нас с URL-адресами формы example.oursite.com/#id=23. Проблема в том, что перенаправление стирает хэш-часть URL-адреса с IE. Насколько мне известно, хэш-часть никогда не отправляется на сервер.

Я хотел реализовать перенаправление с javascript, чтобы сохранить хеш-часть, но поисковая система не будет знать, что наш URL-адрес изменился. (код 301 не возвращается)

Я хочу, чтобы поисковая машина была уведомлена о нашем новом URL (301), потому что нам нужно перенести ранг страницы на наш новый URL.

Есть ли способ перенаправить код 301 и сохранить хэш-часть (#id=23) в URL?

4b9b3361

Ответ 1

Поисковые системы действительно заботятся о хэш-тегах, они часто используют их для выделения определенного контента на странице.

Однако, к вопросу, к сожалению, места привязки, к сожалению, не отправляются на сервер как часть HTTP-запроса. Если вы хотите перенаправить пользователя, вам нужно будет сделать это в Javascript на стороне клиента.

Хорошая статья: http://web.archive.org/web/20090508005814/http://www.mikeduncan.com/named-anchors-are-not-sent/

Ответ 2

Я абсолютно уверен, что часть привязки/закладки/страницы привязки/страницы URL не индексируется поисковыми системами и поэтому не влияет на рейтинг вашей страницы. Выполнение google-поиска для "inurl: #" возвращает нулевые документы, так что резервное копирование моего предположения. Ссылки с внешних сайтов будут индексироваться без хеша.

Вы правы в том, что хэш-часть не отправляется на сервер, насколько я знаю, нет хорошего способа создать URL-адрес перенаправления с хешем в нем.

Из-за этого браузер должен правильно управлять хэшем во время перенаправления. Firefox 3.5, похоже, делает это успешно. Если вы добавите хэш к URL-адресу, который имеет известную переадресацию, вы увидите изменение URL-адреса в адресной строке в новом местоположении, но хеш останется там успешно.

Изменить. В ответ на комментарий ниже, если не является символом хэша во внешнем URL-адресе нужной вам части, то вполне возможно переписать URL. Правило перезаписи Apache позаботится об этом:

RewriteCond %{HTTP_HOST}   !^exemple\.oursite\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www.oursite.com/exemple/$1 [L,R]

Если вы не используете Apache, вам придется заглянуть в документы сервера для чего-то подобного.

Ответ 4

Вы можете создать страницу на старом адресе, который ловит все запросы и перенаправляет на новый сайт с правильным адресом и кодом.

Я сделал что-то подобное, но это было в asp.net, и я думаю, что это не тот язык, который вы используете. Во всяком случае, должен быть способ сделать это на любом языке.

Ответ 5

При возврате статуса 301 ваш сервер должен вернуть заголовок "Местоположение", который указывает на новое местоположение. На практике способ, которым это выполняется, варьируется; некоторые серверы предоставляют полный URL (netloc и путь), некоторые просто предоставляют новый путь и ожидают, что браузер будет искать этот путь в исходном netloc. Похоже, ваше правило перезаписи лишает путь.

Легкий способ увидеть, что возвращает заголовок Location, в оболочке python:

>>> import httplib
>>> conn = httplib.HTTPConnection('exemple.oursite.com')
>>> conn.request('HEAD', '/')
>>> res = conn.getresponse()
>>> print res.getheader('location')

Я боюсь, что не знаю достаточно о mod_rewrite, чтобы правильно рассказать о правиле перезаписи, но это должно дать вам представление о том, что ваш сервер действительно говорит клиентам.

Ответ 6

Видя, как сервер никогда не увидит # (исключая 301 переадресацию), и Google устарел от схемы AJAX Crawling, похоже что выходное решение - единственный способ!

Как я это сделал:

 (function() {

    var redirects = [
        ['#!/about',         '/about'],
        ['#!/contact',       '/contact'],
        ['#!/page-x',        '/pageX']
    ]

    for (var i=0; i<redirects.length; i++) {
        if (window.location.hash == redirects[i][0]) {
           window.location.replace(redirects[i][1]);
        }
    }

 })();

Я предполагаю, что, поскольку искатели Google действительно выполняют Javascript, новые страницы будут правильно проиндексированы.

Я поместил его в тег <script> непосредственно под тегом <title>, чтобы он выполнялся перед любым другим JS/CSS. Обратите внимание, что этот script должен быть необходим только для вашего индексного файла.

Ответ 7

Я зарегистрировал свою учетную запись, поэтому я не могу ее редактировать.

zombat: Извините, я допустил ошибку в своем комментарии. Ссылка на наше видео - example.oursite.com/#video_id=233. В этом случае мое правило перезаписи в Apache не работает.

Ник Берарди: Мы изменили способ работы наших ссылок. Мы больше не используем #, только для обратной совместимости

Ответ 8

Поисковые боты не заботятся о хэш-тегах. И если вы используете их для каких-либо флеш-вызовов или вызовов AJAX, у вас возникают более серьезные проблемы, чем переадресация 301 не работает. Поскольку, если у вас нет контента в альтернативной форме, поисковые системы не индексируют ваш сайт, и вы определенно страдаете, насколько продвигается SEO.