Googelbot находит мой оригинальный URI, хотя у меня есть рабочая директива перезаписи
Я имею:
RewriteRule ^Article/([^/]*)$ /article.php?newsid=$1 [L]
Это означает, что URL должен быть //example.com/Article/855563
но гугл ползает //example.com/article.php?newsid=855563
, Что я могу сделать, чтобы предотвратить это? Или перенаправить 301 на example.com/Article/855563
?
1 ответ
Сначала необходимо определить, почему Google сканирует неправильные URL-адреса.
Изменили ли вы существующую структуру URL(которая была проиндексирована поисковыми системами и имела внешнюю ссылку)? В этом случае вам нужно было бы осуществить перенаправление со старого URL-адреса на новый, чтобы сохранить SEO и заставить поисковые системы заменить старые URL-адреса в поисковой выдаче.
Вы непреднамеренно ссылаетесь на неправильные URL-адреса внутри организации и выставляете "неправильные" URL-адреса поисковым системам? Если это так, они должны быть исправлены до реализации перенаправления.
В противном случае Google не смог бы обнаружить "неправильные" URL-адреса.
Вы также должны реализовывать rel="canonical"
тег в заголовке ваших страниц, чтобы указать правильный канонический URL для поисковых систем.
Для того, чтобы внешне перенаправить URL-адрес формы /article.php?newsid=<newsid>
в /Article/<newsid>
(канонический URL) - обратная сторона существующей внутренней перезаписи - тогда вы можете сделать что-то вроде следующего в верхней части вашего .htaccess
файл (до существующей перезаписи):
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^newsid=([^&]*)
RewriteRule ^article\.php$ /Article/%1 [R=302,L]
Первое условие, которое проверяет REDIRECT_STATUS
Переменная окружения необходима для предотвращения цикла перенаправления - она гарантирует, что правило обрабатывается только по прямым запросам от клиента, а не по переписанным запросам (ваша существующая директива).
Второе условие фиксирует значение newsid
Параметр URL(который встречается в начале пути URL). Это сохраняется в %1
обратная ссылка (используется позже в RewriteRule
замена). Обратите внимание, что это захватывает что-нибудь (как в вашем переписать), однако, если newsid
значение всегда числовое, тогда это действительно должно быть сделано более ограничительным. например. ^newsid=(\d+)
(Только 1 или более цифр).
Обратите внимание, что в настоящее время это 302 (временное) перенаправление. Измените его на 301 (постоянное) перенаправление, только когда вы подтвердите, что оно работает нормально - во избежание проблем с кэшированием.