ryg

Дублирующийся контент в Drupal 7 и SEO

 
 
Мои настройки robots.txt и .htaccess
 
Хорошая CMS Drupal, но с точки зрения SEO у нее есть ряд недостатков. Основной проблемой для меня стала проблема "дублирущегося" контента. По моим оценкам за счет дублирующегося контента сайт способен потерять от 20 до 50 % своего трафика. С данной проблемой можно и необходимо бороться.
 
Что я использую из дополнительных модулей:
Настройка модуля Global Redirect в Drupal 7  Global Redirect (Глобальная переадресация) - очень полезный модуль, позволяющий ликвидировать часть дублей.
 
Некоторые думают, что лучше, если адрес страницы заканчивается  "/", я же считаю, что нет разницы, главное чтобы одна страница не отзывалась на адрес со слешем на конце и без него. Поэтому я включил его удаление, но такое изменение требует изменений в файле robots.txt (смотреть ниже).
 
Включить "чистые ссылки" - это я думаю понятно без объяснений.
 
Убрать конечный нулевой аргумент -включаем
 
Проверка учета регистра в url - этот момент стоит рассмотреть подробнее. Многие знают, но не все обращают внимание на следующую ситуацию: Поисковые системы считают разными адресами адреса, написанные  заглавными и строчными буквами. Например, адреса:
 
http://osxh.local/drupal/doubles
http://osxh.local/drupal/douВles
 
Для поисковой системы это разные адреса и если сайт выдает страницу с одним и тем же содержимым, то у вас на сайте дубли. Данный параметр включает переадресацию на правильную страницу, то есть, как написано в алиасе. Но не нужно забывать, что если вы организовывает ссылки на свой сайт, то адреса ссылок тоже должны быть правильными.
 
Вторым способом борьбы с дублями, являются канонические адреса или ссылки. Так что этот параметр тоже включаем. Но желательно предварительно проверить в выдаваемом коде страницы наличие адреса. В Drupal существуют другие модули, создающие канонические ссылки и может получиться два тега rel canonical. Это тоже нехорошо.
 
 
Итак, будем считать, что с модулем Global Redirect разобрались. Теперь из-за того, что мы отменили слэш на конце адреса необходимо внести изменения в robots.txt
 
Вот часть стандартного файла для Drupal, касательно "чистых" ссылок

# Paths (clean URLs)
Disallow: /admin/
Disallow: /comment/reply/
Disallow: /filter/tips/
Disallow: /node/add/
Disallow: /search/
Disallow: /user/register/
Disallow: /user/password/
Disallow: /user/login/
Disallow: /user/logout/
	
Изменения потребует раздел # Paths (clean URLs). Вот как он выглядит у меня:
# Paths (clean URLs)
Disallow: /admin
Disallow: /comment
Disallow: /filter/tips
Disallow: /node/add
Disallow: /search
Disallow: /user
# Форумы
Disallow: /forum
Disallow: /forum/active
Disallow: /forum/unanswered
Disallow: /messages
Disallow: /comments/recent
Disallow: /*/edit
Disallow: /*/delete
Disallow: /taxonomy
Я убрал завершающие слэши. Я закрыл комментарии к страницам, но у меня их и делать нельзя (спамеры достали). Закрыты страницы поиска и учетных записей пользователя:
Disallow: /search
Disallow: /user

На примере форум отключен, если его необходимо индексировать то закомментируйте строку:

#Disallow: /forum

Но строки 

Disallow: /forum/active
Disallow: /forum/unanswered

должны быть включены, так как новые и не отвеченные посты выдаются по двум адресам.
Вообще форум и таксономия в друпал это постоянный источник дублей. Перейдем к строке 

Disallow: /taxonomy

Если вы используете термины таксономии и "чистые ссылки", то модуль переадресации срабатывает от случая к случаю. Мне, по крайней мере, не удалось понять, как он работает. Сначала я настроил переадресацию в файле .htaccess. Вот как там это выглядит:

 # Удалить дубли таксономии
  # Редиректы 
  # fix dublicate taxonomy/*/all
   RedirectMatch 301 /taxonomy/term/([0-9]+)/(.*) /taxonomy/term/$1
   RewriteRule ^taxonomy/term/([0-9]+)/all$ /taxonomy/term/$1 [L,R=301]
   RewriteRule ^taxonomy/term/([0-9]+)/feed$ /taxonomy/term/$1 [L,R=301]

Здесь убираются окончания feed и all на адреса без них. И потом срабатывает "родная" переадресация. Но как оказалось, это не всегда помогает, тестер под названием Google сумел найти на странице подобный адрес успешно его проиндексировал (переадресация и стандартный robots.txt не сработал):

http://site.ru/taxonomy/term/1/o-programme?page=2

Удаление www из адреса есть в стандартном файле .htacces, закомментировано, чтобы администратор сам принял решение как ему лучше с www или без www. Если вы хотите, чтобы сайт переадресовывался на адрес вида http://site.ru, необходимо удалить комментарий со следующих строк:

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
Если же вы хотите, чтобы адрес сайта был вида http://www.site.ru, то эти строки оставляете закомментированными, а снимаете комментарий со строк:
#RewriteCond %{HTTP_HOST} .
# RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Дублирование доменов третьего уровня или redirect 301 с домена третьего уровня.

Данная проблема возникает у ряда провайдеров виртуального хостинга. Когда у вас есть основной сайт, допустим:

http://mainsite.ru

и на этой же площадке размещены еще два сайта:

http://slavesite1.ru
http://slavesite2.ru

Очень часть в таких случаях провайдер дает доступ к двум подчиненным сайтам по следующим адресам:
http://slavesite1.mainsite.ru
http://slavesite2.mainsite.ru

Гугл каким-то образом находит данный адрес (я подозреваю, что ему "стучит" Chrome) и индексирует данные адреса. Вы получаете дубли и падение трафика. Закрыть это можно настройками у провайдера или 301 редиректом на правильный адрес  в .htaccess

# Удалить дубли доменов третьего уровня Redirect 301
  RewriteCond %{HTTP_HOST} ^www\.slavesite1.mainsite\.ru$ [NC]
  RewriteRule ^(.*)$ http://slavesite1.ru/$1 [L,R=301]
  RewriteCond %{HTTP_HOST} ^slavesite1.mainsite\.ru$ [NC]
  RewriteRule ^(.*)$ http://slavesite1.ru/$1 [L,R=301]
Нужные вам адреса подставите сами.
Для поиска дублей и анализа как индексируются мои сайты, я использую собственный скрипт слежения за индексацией страниц поисковыми системами. Рекомендую его всем.