Перейти к содержимому


Дубли страниц

seo дубли страниц

  • Вы не можете ответить в тему
Сообщений в теме: 10

#1 Den

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 17 March 2017 - 09:39 AM

Всем привет.

Только что заметил огромное количество дублей страниц с товаром в индексе Google. За такое дело сайту может стать очень плохо, а в моем случае уже стало.
Не знаю с каких пор, но робот Google, а может и Яндекса, стал ходить по скриптам, а именно - выставлять оценки товару.
А когда товару со страницы site.com/product_1.html установить оценку, то в зависимости от нее происходит редирект на страницы вида:

site.com/index.php?productID=1&vote=yes&mark=1
site.com/index.php?productID=1&vote=yes&mark=2
site.com/index.php?productID=1&vote=yes&mark=3
site.com/index.php?productID=1&vote=yes&mark=4
site.com/index.php?productID=1&vote=yes&mark=5

И эти страницы попадают в индекс, создавая 5 дубликатов страниц каждому товару.

Как правильно обойти:
1) Запретить индексацию в robots.txt или сделать правильный редирект (не решает проблему "левых" оценок)
2) Запретить выставлять оценки роботу (как?)
  • 0

#2 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 17 March 2017 - 10:43 AM

Не знаю с каких пор, но робот Google, а может и Яндекса, стал ходить по скриптам, а именно - выставлять оценки товару.

Врядли робот сам стал ходить по скриптам.
Скорее, он запоминает, по каким ссылкам ходили клиенты.
Форма голосования имеет метод GET, т.е. при нажатии на "звездочку" происходит переход по ссылке указанного вида, а яваскрипты гугля и яндекса отсылают эту ссылку поисковику, как и любую другую, по которой был переход. Решение проблемы, как мне кажется, состоит в замене метода в форме на POST, а action - на /product_XXX.html (или на /index.php?productID=XXX, тут уж у кого как выбран тип ссылок). Тогда переход по этой ссылке не создаст дубля страницы в принципе.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#3 Den

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 17 March 2017 - 12:32 PM

Врядли робот сам стал ходить по скриптам.

Похоже, что именно бот стал ходить, так как массово оценки стали появляться. Причем возникло после того, как перевели сайт на другой домен и на https и пошла переиндексация. На старом домене этого не было.

Еще заметил странные обращения бота по страницам, которых отродясь на сайте не было. Вы не замечали такого? Причем в вебмастере ссылок на эту страницу не отображается. Например - site.com/doed-d-d-d-n-d-n-n-d-d-d-n-n-d-n-d-d-d-d/d-d-n-d-d-d-n-d-d.html

замене метода в форме на POST, а action - на /product_XXX.html (или на /index.php?productID=XXX, тут уж у кого как выбран тип ссылок). Тогда переход по этой ссылке не создаст дубля страницы в принципе.


Вы имеете ввиду замену
строки
<form name="VotingForm" action='index.php' method="GET" id="VotingForm" class="print">
на
<form name="VotingForm" action='index.php?productID={$product_info.productID}' method="POST" id="VotingForm" class="print">

Заменил, но все равно генерируется url вида index.php?productID=1&vote=yes&mark=1
  • 0

#4 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 17 March 2017 - 02:01 PM

Заменил

Это просто идея. Кроме изменения метода и акции в форме надо еще и соответствующую PHP-обработку переделать с GET на POST.

но все равно генерируется url вида index.php?productID=1&vote=yes&mark=1

Не верю. Либо не стерт кэш. Ну откуда в ссылке браться GET-переменным vote и mark, если они теперь передаются как POST-переменные?
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#5 Den

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 17 March 2017 - 02:22 PM

Либо не стерт кэш.

так точно, почистил кэш - пропали. Но голоса не засчитываются, т.к. обработка не переделана. Но даже если ее переделать, то все равно в итоге отображается url вида index.php?productID=1 и только если обновить страницу срабатывает редирект на ЧПУ-шную версию. Интересно почему сразу не редиректит и будет ли считаться дублем или нет...

А обработку эту нужно переделать?
product_detailed.php:
		if (isset($_GET["vote"]) && isset($productID)) //vote for a product
		{
		  if (!isset($_SESSION["vote_completed"][ $productID ]) && isset($_GET["mark"]) && strlen($_GET["mark"])>0)
		  {
				$mark = (int) $_GET["mark"];
				if ($mark>0 && $mark<=5)
				{
				db_query("UPDATE ".PRODUCTS_TABLE." SET customers_rating=(customers_rating*customer_votes+'".$mark."')/(customer_votes+1), customer_votes=customer_votes+1 WHERE productID=".$productID);
				}
		  }
		  $_SESSION["vote_completed"][ $productID ] = 1;
		}

Голоса стали учитываться после того, как поменял все вхождения GET на POST. Неужели угадал? :)
  • 0

#6 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 17 March 2017 - 03:37 PM

Но даже если ее переделать, то все равно в итоге отображается url вида index.php?productID=1 и только если обновить страницу срабатывает редирект на ЧПУ-шную версию

Значит, надо в action прописать именно правильный url. В случае моего ЧПУ, думаю, это будет action="product_{$product_info.productID}.html" (оно потом подменится на ЧПУ-ссылку), в случае других что-нибудь типа action="{$product_info.uri}".

Голоса стали учитываться после того, как поменял все вхождения GET на POST. Неужели угадал?

А какие еще варианты могут быть?

PS. Ну и rel="canonical" на страницах карточки товара никто не отменял. Как раз для того и придумано, чтобы канонической была только одна ссылка даже если если одна и та же страница может иметь несколько разных ссылок.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#7 Den

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 18 March 2017 - 02:14 PM

Значит, надо в action прописать именно правильный url. В случае моего ЧПУ, думаю, это будет action="product_{$product_info.productID}.html" (оно потом подменится на ЧПУ-ссылку), в случае других что-нибудь типа action="{$product_info.uri}".

я почему-то подумал, что он ID из action берет, а у меня ЧПУ без ID (action='{$product_info|@fu_make_url}'). Но работает!
  • 0

#8 Den

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 19 March 2017 - 06:51 PM

Обнаружилась еще группа дублей страниц, которых раньше в индексе не было. Не могу понять откуда гугл их взял, но теперь и дополнительные страницы имеют 2 url:
  • index.php?show_aux_page=1
  • page=1.html
Пытаюсь настроить 301 редирект с первого на второй, срабатывает, но получаю ошибку - ERR_TOO_MANY_REDIRECTS

Делал так:
RewriteCond %{QUERY_STRING} ^show_aux_page=(.+)$
RewriteRule ^(.*)index\.php?(.*)$  $1/page_%1.html?  [R=301,NC,L]

Update:

Рабочий вариант редиректа для дополнительных страниц:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?show_aux_page=([0-9]+)\ HTTP/
RewriteRule ^index\.php$ http://ваш_сайт/page_%1.html? [R=301,L]

  • 0

#9 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 20 March 2017 - 05:26 PM

page=1.html

Если поисковик считает, что эта страница является дублем чего-то-там, то прежде всего, как мне кажется, надо разбираться почему вообще по этой бредовой ссылке что-то с кодом 200 отдается, а не Error 404. Причем еще и совпадающее с действующей страницей.

Пытаюсь настроить 301 редирект с первого на второй, срабатывает, но получаю ошибку - ERR_TOO_MANY_REDIRECTS

Что совершенно нормально, т.к. Вы пытаетесь настроить редирект с index.php?show_aux_page=xxx на page_xxx.html, а в .htaccess уже есть реврайт в обратную сторону. Получается вечный цикл А-редирект-В-реврайт-А и так по кругу. Почитайте, как работает выполнение этих правил в htaccess. Оно вовсе не происходит один раз. Если совсем уж коротко, то правила исполняются по кругу пока будет задействовано хотя бы одно, т.е. пока полученная ссылка не пройдет через правила не попав ни под одно условие.

Рабочий вариант редиректа для дополнительных страниц:

Это какой-то костыль и странно, что он вообще работает.

1. для robots.txt есть параметр Clean-param, позволяющий убрать дубли страниц со всякими не влияющими (или не нужно влияющими) на содержимое GET-параметрами. На мой взгляд, для ShopCMS его обязательно нужно прописывать с offset&sort&direction. Как минимум. А в Вашем случае еще и с &vote&mark.
2. для html-шаблонов есть <link rel="canonical"... указывающее поисковику урл основной страницы среди всевозможных дублей.

В ShopCMS и штатно достаточно страниц, которые поисковик может воспринимать как дубли. /category_xxx.html и /index.php?categoryID=xxx дадут одну и ту же страницу, причем вторая еще будет с вариантами из sort и direction. Думаю, все наступали на грабли, когда половина страниц с товарами числятся в поисковике как product_XXX.html, а другая половина как index.php?productID=XXX. Хотя бы потому, что переход на страницу дискуссий со страницы /product_XXX.html выглядит как index.php?productID=XXX&discuss=yes, а ссылка "вернуться назад к товару"
выглядит уже как index.php?productID=XXX, а вовсе не как product_XXX.html.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#10 Den

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 20 March 2017 - 06:01 PM

Если поисковик считает, что эта страница является дублем чего-то-там, то прежде всего, как мне кажется, надо разбираться почему вообще по этой бредовой ссылке что-то с кодом 200 отдается, а не Error 404. Причем еще и совпадающее с действующей страницей.

я там опечатался, имелось ввиду конечно же стандартный ЧПУ shopcms для дополнительных страниц (с url вида page_1.html), который есть у всех, кто не использует сторонние ЧПУ или не включил их для этих самых страниц.

Это какой-то костыль и странно, что он вообще работает.

очень доходчиво про редирект с динамических страниц на статические здесь - http://www.fortress-...to-static-urls/

для robots.txt есть параметр Clean-param, позволяющий убрать дубли страниц

Для удаления url вида index.php?show_aux_page=1 не поможет, так как их вообще не должно быть в индексе, а они туда уже попали. Как впрочем и тех, что productID=1vote=yes&mark=1, которых тоже вообще не должно там быть. Тут или редирект 301 или отдавать ошибку 404.
Я вообще не вижу им применения для shopcms, разве что только для тех, кто не использует ЧПУ вообще, например, если url какой-то категории index.php?category=XXX, то чтобы не было дубля этой же категории отсортированной в обратном порядке (с url вида index.php?category=XXX&sort=DESC) нужно будет использовать этот Clean-param
  • 0

#11 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 20 March 2017 - 07:42 PM

я там опечатался, имелось ввиду конечно же стандартный ЧПУ shopcms для дополнительных страниц (с url вида page_1.html), который есть у всех, кто не использует сторонние ЧПУ или не включил их для этих самых страниц.

Основная идея остается та же. Откуда поисковик взял динамическую ссылку с show_aux_page=xxx? С категориями я знаю, откуда они берутся, с товарами тоже. А вот со статическим страницами - нет. Штатно в ShopCMS нет ссылок на статические страницы с динамическим видом, если в "общих настройках" включены (а они по умолчанию включены и мало кто их выключает) псевдостатические ссылки.

очень доходчиво про редирект с динамических страниц на статические здесь - http://www.fortress-...to-static-urls/

Ага. Цитата из:
====
В цели этой статьи не входит объяснение принципов работы регулярных выражений и модуля mod_rewrite. Документация по mod_rewrite и множество других мануалов легко доступны для всех желающих.
А попытка же использовать mod_rewrite без полного ознакомления с этой документацией — первый шаг (а часто и последний) к серьезным проблемам.
====

Для удаления url вида index.php?show_aux_page=1 не поможет, так как их вообще не должно быть в индексе, а они туда уже попали. Как впрочем и тех, что productID=1vote=yes&mark=1, которых тоже вообще не должно там быть.

Их там станет меньше, что тоже положительно.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)