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 функция.

Другие вопросы по тегам