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 (постоянное) перенаправление, только когда вы подтвердите, что оно работает нормально - во избежание проблем с кэшированием.

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