Permant Redirect без доступа к читаемым URL-адресам SEO
Я собираюсь изменить некоторые из моих URL-адресов с details.html?id=1234
в details/1234_really_interesting_stuff
, Идентификатор 1234 будет использоваться для идентификации контента, really_interesting_stuff
просто сделать URL более читабельными.
На следующем этапе я заменю все ссылки на моем сайте, ссылающиеся на details.html?id=1234
с новым URL, где really_interesting_stuff
хранится в базе данных. Проблема, с которой я сталкиваюсь сейчас: как я могу сделать 301-перенаправление, дружественное к Google, таким, чтобы у меня не было дублированного контента (потому что Google по-прежнему будет старые ссылки, такие как details.html?id=1234
которые также распространяются на других веб-страницах). Мне придется переслать details/1234_really_interesting_stuff
, К сожалению, строка хранится только в базе данных.
Насколько я знаю, единственный удобный для Google 301-редирект - это htaccess-файл. Но нет способа извлечь информацию из базы данных в htaccess-файл. Есть идеи, как мне решить эту проблему?
2 ответа
Насколько я знаю, единственный удобный для Google 301-редирект - это htaccess-файл.
Это неверно, и у Google нет возможности предугадать, как ты делаешь свои 301-е.
Вы можете делать свои перенаправления динамически. Пример (на PHP):
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.yourwebsite.tld/details/1234_really_interesting_stuff");
echo "<html><body>The page has moved <a href="http://www.yourwebsite.tld/details/1234_really_interesting_stuff">here.</a></body></html>" ;
Причина фрагмента HTML описана здесь.
Это то, что вам нужно поместить в ваш DOCUMENT_ROOT/.htaccess
RewriteEngine On
# external redirect from actual URL to pretty one with 302
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+details\.html\?id=([^\s&]+) [NC]
#RewriteRule ^ /details/%1? [R=302,L]
# internal forward from pretty URL to actual one
RewriteRule ^details/([^/.]+)/?$ /details.html?id=$1 [L,QSA,NC]
Тогда внутри details.html
Вы можете проверить, указан ли заголовок в $_GET['id']
ИЛИ нет, если нет, то запросить базу данных и добавить заголовок в URL, используя header
функция.