#1
Отправлено 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) Запретить выставлять оценки роботу (как?)
#2
Отправлено 17 March 2017 - 10:43 AM
Врядли робот сам стал ходить по скриптам.Не знаю с каких пор, но робот Google, а может и Яндекса, стал ходить по скриптам, а именно - выставлять оценки товару.
Скорее, он запоминает, по каким ссылкам ходили клиенты.
Форма голосования имеет метод GET, т.е. при нажатии на "звездочку" происходит переход по ссылке указанного вида, а яваскрипты гугля и яндекса отсылают эту ссылку поисковику, как и любую другую, по которой был переход. Решение проблемы, как мне кажется, состоит в замене метода в форме на POST, а action - на /product_XXX.html (или на /index.php?productID=XXX, тут уж у кого как выбран тип ссылок). Тогда переход по этой ссылке не создаст дубля страницы в принципе.
#3
Отправлено 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
#4
Отправлено 17 March 2017 - 02:01 PM
Это просто идея. Кроме изменения метода и акции в форме надо еще и соответствующую PHP-обработку переделать с GET на POST.Заменил
Не верю. Либо не стерт кэш. Ну откуда в ссылке браться GET-переменным vote и mark, если они теперь передаются как POST-переменные?но все равно генерируется url вида index.php?productID=1&vote=yes&mark=1
#5
Отправлено 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. Неужели угадал?
#6
Отправлено 17 March 2017 - 03:37 PM
Значит, надо в action прописать именно правильный url. В случае моего ЧПУ, думаю, это будет action="product_{$product_info.productID}.html" (оно потом подменится на ЧПУ-ссылку), в случае других что-нибудь типа action="{$product_info.uri}".Но даже если ее переделать, то все равно в итоге отображается url вида index.php?productID=1 и только если обновить страницу срабатывает редирект на ЧПУ-шную версию
А какие еще варианты могут быть?Голоса стали учитываться после того, как поменял все вхождения GET на POST. Неужели угадал?
PS. Ну и rel="canonical" на страницах карточки товара никто не отменял. Как раз для того и придумано, чтобы канонической была только одна ссылка даже если если одна и та же страница может иметь несколько разных ссылок.
#7
Отправлено 18 March 2017 - 02:14 PM
я почему-то подумал, что он ID из action берет, а у меня ЧПУ без ID (action='{$product_info|@fu_make_url}'). Но работает!Значит, надо в action прописать именно правильный url. В случае моего ЧПУ, думаю, это будет action="product_{$product_info.productID}.html" (оно потом подменится на ЧПУ-ссылку), в случае других что-нибудь типа action="{$product_info.uri}".
#8
Отправлено 19 March 2017 - 06:51 PM
- index.php?show_aux_page=1
- page=1.html
Делал так:
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]
#9
Отправлено 20 March 2017 - 05:26 PM
Если поисковик считает, что эта страница является дублем чего-то-там, то прежде всего, как мне кажется, надо разбираться почему вообще по этой бредовой ссылке что-то с кодом 200 отдается, а не Error 404. Причем еще и совпадающее с действующей страницей.page=1.html
Что совершенно нормально, т.к. Вы пытаетесь настроить редирект с index.php?show_aux_page=xxx на page_xxx.html, а в .htaccess уже есть реврайт в обратную сторону. Получается вечный цикл А-редирект-В-реврайт-А и так по кругу. Почитайте, как работает выполнение этих правил в htaccess. Оно вовсе не происходит один раз. Если совсем уж коротко, то правила исполняются по кругу пока будет задействовано хотя бы одно, т.е. пока полученная ссылка не пройдет через правила не попав ни под одно условие.Пытаюсь настроить 301 редирект с первого на второй, срабатывает, но получаю ошибку - ERR_TOO_MANY_REDIRECTS
Это какой-то костыль и странно, что он вообще работает.Рабочий вариант редиректа для дополнительных страниц:
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.
#10
Отправлено 20 March 2017 - 06:01 PM
я там опечатался, имелось ввиду конечно же стандартный ЧПУ shopcms для дополнительных страниц (с url вида page_1.html), который есть у всех, кто не использует сторонние ЧПУ или не включил их для этих самых страниц.Если поисковик считает, что эта страница является дублем чего-то-там, то прежде всего, как мне кажется, надо разбираться почему вообще по этой бредовой ссылке что-то с кодом 200 отдается, а не Error 404. Причем еще и совпадающее с действующей страницей.
очень доходчиво про редирект с динамических страниц на статические здесь - http://www.fortress-...to-static-urls/Это какой-то костыль и странно, что он вообще работает.
Для удаления url вида index.php?show_aux_page=1 не поможет, так как их вообще не должно быть в индексе, а они туда уже попали. Как впрочем и тех, что productID=1vote=yes&mark=1, которых тоже вообще не должно там быть. Тут или редирект 301 или отдавать ошибку 404.для robots.txt есть параметр Clean-param, позволяющий убрать дубли страниц
Я вообще не вижу им применения для shopcms, разве что только для тех, кто не использует ЧПУ вообще, например, если url какой-то категории index.php?category=XXX, то чтобы не было дубля этой же категории отсортированной в обратном порядке (с url вида index.php?category=XXX&sort=DESC) нужно будет использовать этот Clean-param
#11
Отправлено 20 March 2017 - 07:42 PM
Основная идея остается та же. Откуда поисковик взял динамическую ссылку с show_aux_page=xxx? С категориями я знаю, откуда они берутся, с товарами тоже. А вот со статическим страницами - нет. Штатно в ShopCMS нет ссылок на статические страницы с динамическим видом, если в "общих настройках" включены (а они по умолчанию включены и мало кто их выключает) псевдостатические ссылки.я там опечатался, имелось ввиду конечно же стандартный ЧПУ shopcms для дополнительных страниц (с url вида page_1.html), который есть у всех, кто не использует сторонние ЧПУ или не включил их для этих самых страниц.
Ага. Цитата из:очень доходчиво про редирект с динамических страниц на статические здесь - http://www.fortress-...to-static-urls/
====
В цели этой статьи не входит объяснение принципов работы регулярных выражений и модуля mod_rewrite. Документация по mod_rewrite и множество других мануалов легко доступны для всех желающих.
А попытка же использовать mod_rewrite без полного ознакомления с этой документацией — первый шаг (а часто и последний) к серьезным проблемам.
====
Их там станет меньше, что тоже положительно.Для удаления url вида index.php?show_aux_page=1 не поможет, так как их вообще не должно быть в индексе, а они туда уже попали. Как впрочем и тех, что productID=1vote=yes&mark=1, которых тоже вообще не должно там быть.