Gregar Posted December 20, 2015 Report Share Posted December 20, 2015 (edited) Многие встречаются с проблемой дублей страниц, что в свою очередь негативно влияет на сайт при индексировании его поисковиками. Для того чтобы избавится от такой проблемы я использовал следующий код: // Убираем слеш в конце ссылок $uri = preg_replace("/\?.*/i",'', $_SERVER['REQUEST_URI']); if ((!strpos($uri, 'simpla')) && (strlen($uri)>1)) { if (rtrim($uri,'/')!=$uri) { header("HTTP/1.1 301 Moved Permanently"); header('Location: http://'.$_SERVER['SERVER_NAME'].str_replace($uri, rtrim($uri,'/'), $_SERVER['REQUEST_URI'])); exit(); } } Приведенный выше код необходимо поместить в файл index.php который находится в корне сайта. ~12 строка. Если у Вас есть решение по лучше, разместите его в ответах данной темы. Методы через .htcaccess мне не помогли и приходилось очень много править и выстраивать правила, что в моем случае было слишком напряжно. Edited December 20, 2015 by Gregar Quote Link to post Share on other sites
Kors Posted December 20, 2015 Report Share Posted December 20, 2015 Если в URL товара встретится 'admin', то работать на такой странице не будет, напримерhttp://site.ru/products/administator-handbook/ И вообще непонятно, зачем нужно условие !strpos($uri, 'admin') По-моему, его можно безболезненно удалить. Quote Link to post Share on other sites
Gregar Posted December 20, 2015 Author Report Share Posted December 20, 2015 (edited) Если в URL товара встретится 'admin', то работать на такой странице не будет, напримерhttp://site.ru/products/administator-handbook/ И вообще непонятно, зачем нужно условие !strpos($uri, 'admin') По-моему, его можно безболезненно удалить. Верное замечание. Скорее всего логичнее изменить на simpla чтобы мы не теряли возможность входа в админку. Edited December 20, 2015 by Gregar Quote Link to post Share on other sites
mishanya Posted December 20, 2015 Report Share Posted December 20, 2015 а есть ли смысл? для страницы со слешами выдается канонический юрл без слеша Quote Link to post Share on other sites
Gregar Posted December 20, 2015 Author Report Share Posted December 20, 2015 а есть ли смысл? для страницы со слешами выдается канонический юрл без слеша Смысл есть в том случае если вы занимаетесь сео оптимизацией сайта. Если для Вас это не важно или сайт содержит мало товаров и услуг, то в этом случае я думаю хватит и того, что имеется стандартно. Хотя лишним это не будет. Quote Link to post Share on other sites
mishanya Posted December 20, 2015 Report Share Posted December 20, 2015 Смысл есть в том случае если вы занимаетесь сео оптимизацией сайта. Если для Вас это не важно или сайт содержит мало товаров и услуг, то в этом случае я думаю хватит и того, что имеется стандартно. Хотя лишним это не будет. да, я не СЕО-шник и не знаю, просто интересуюсь. тоесть каноникл не решает в полной мере проблему таких дублей? Quote Link to post Share on other sites
Gregar Posted December 20, 2015 Author Report Share Posted December 20, 2015 да, я не СЕО-шник и не знаю, просто интересуюсь. тоесть каноникл не решает в полной мере проблему таких дублей? В какой-то степени он способен решить некоторые дубли, но тут есть много подводных камней. При использовании канонических адресов, нужно прописывать условия, где и какой адрес нужно показать поисковику. В симпле сделано все таким образом чтобы продемонстрировать, что те или иные функции уже имеются в движке, а вот допилить и применить их под себя может уже любой желающий. К примеру если мы в каталоге товаров перейдем на вторую страницу, мы увидем в адресной строке такую ссылку: http://demo.simplacms.ru/catalog/mobilnye-telefony?page=2 где на конце ссылке присутствует ?page=2 мы должны сообщить поисковику о том, что канонический адрес на этой странице совсем другой. В стандартном шаблоне адрес этот имеется, но нам не зачем индексировать данные страницы. Значит нужно добавить условие которое будет показывать на подобных страницах <meta name="robots" content="noindex, follow" /> <link rel="prev" href="/catalog/mobilnye-telefony"/> <link rel="next" href="/catalog/mobilnye-telefony?page=3"/> Выходит, что часть каких-то проблем с оптимизацией мы можем решить стандартным набором условий и функций, но чтобы избавиться от дублей придется воспользоваться всеми методами для оптимизации страниц. Страница: http://demo.simplacms.ru/products/samsung-s5570-galaxy-mini и страница: http://demo.simplacms.ru/products/samsung-s5570-galaxy-mini/ для нас выглядят одинаково, но для поисковика это дубли. Quote Link to post Share on other sites
stasok Posted December 21, 2015 Report Share Posted December 21, 2015 Как то делал - убирал конечный слеш в ШопСкрипте. Лет 5 назад. Вроде работало красиво через "ейчтиаксес".По пагинации. Есть статья на СеоПрофи хорошая.Я делал сразу по двум вариантам. И next, prec + каноникал на первую страницу(на страницах 2+) - без page-1.Закрывал в роботсе страницы пагинации. И ещё тоже самое только без prev, next - на page-all. Quote Link to post Share on other sites
Julius123 Posted December 21, 2015 Report Share Posted December 21, 2015 У меня вот такой редирект стоит и прекрасно работает. Зачем править код? # Редирект на адреса без слеша RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1 [R=301,L] Quote Link to post Share on other sites
shin Posted December 25, 2015 Report Share Posted December 25, 2015 (edited) Дам совет который не даст ни кто здесь по ходу :-). Неиграйтесь с огнём ребята:-) Не знаете, не уверены, не делайте, пусть всё так ибудет с кодом. Ни черта не исправляйте в симпла сами или по совету на форумах тапаэтой темы, которую часть продублирую:Многие встречаются с проблемой дублей страниц, что в своюочередь негативно влияет на сайт при индексировании его поисковиками. Длятого чтобы избавится от такой проблемы я использовал следующий код:ну и некий код даже обсуждаемый.И вот программисты как правило ни чего не понимающие в сео (нехочу обидеть ни кого) начинают грызть косточку брошенную. Скажу так НЕТ ВСИМПЛА НИ КАКОЙ ПРОБЛЕМЫ С ДУБЛЕМ СТРАНИЦ! И НЕ МОЖЕТ БЫТЬ! Откройте для себяВебмастер гугл хотя б. Главное для вашей оптимизации сайта уникальный контент и правильные метаданные данные, про которые можете почитать в инете, а вот это нужно предоставить либо профилибо занимайтесь сами - консультируйтесь и двигайтесь. Ни в коем случае не исправляйте сео ядросистемы - чревато последствиями. Баловаться c htaccess или robots.txt этоодно, однако тоже нужно подходить с умом используя рекомендации яндекс и гугл ввебмастере. Могу здесь много писать про дубли ссылок, хлебные якобы правильныекрошки и пагинацию страниц, простите за русский, фильтр симпла, сортировку,каноникал, большую карту сайта более 50 000 товаров, нормальный её вывод якобы нужный на сайте в htmlи прочее, но не хочу, ибо это маленькие проблемы симпла и это в целом для раскруткисайта не так уж и важно!!! Edited December 25, 2015 by shin Quote Link to post Share on other sites
Gregar Posted January 9, 2016 Author Report Share Posted January 9, 2016 Дам совет который не даст ни кто здесь по ходу :-). Неиграйтесь с огнём ребята:-) Не знаете, не уверены, не делайте, пусть всё так ибудет с кодом. Ни черта не исправляйте в симпла сами или по совету на форумах тапаэтой темы, которую часть продублирую: Многие встречаются с проблемой дублей страниц, что в своюочередь негативно влияет на сайт при индексировании его поисковиками. Длятого чтобы избавится от такой проблемы я использовал следующий код: ну и некий код даже обсуждаемый. И вот программисты как правило ни чего не понимающие в сео (нехочу обидеть ни кого) начинают грызть косточку брошенную. Скажу так НЕТ ВСИМПЛА НИ КАКОЙ ПРОБЛЕМЫ С ДУБЛЕМ СТРАНИЦ! И НЕ МОЖЕТ БЫТЬ! Откройте для себяВебмастер гугл хотя б. Главное для вашей оптимизации сайта уникальный контент и правильные метаданные данные, про которые можете почитать в инете, а вот это нужно предоставить либо профилибо занимайтесь сами - консультируйтесь и двигайтесь. Ни в коем случае не исправляйте сео ядросистемы - чревато последствиями. Баловаться c htaccess или robots.txt этоодно, однако тоже нужно подходить с умом используя рекомендации яндекс и гугл ввебмастере. Могу здесь много писать про дубли ссылок, хлебные якобы правильныекрошки и пагинацию страниц, простите за русский, фильтр симпла, сортировку,каноникал, большую карту сайта более 50 000 товаров, нормальный её вывод якобы нужный на сайте в htmlи прочее, но не хочу, ибо это маленькие проблемы симпла и это в целом для раскруткисайта не так уж и важно!!! Как показывает практика, в Simpla CMS все сделано хорошо, но нужно все равно работать и работать над системой для того чтобы достигать результатов. Дубли в Simpla CMS есть как в yandex так и в google. Вы написали выше то, что и так каждый знает, а форум для того и создан чтобы решать проблему. Можно написать редиректы в htcaccess, а можно в php коде. Тут уже дело каждого чем удобнее пользоваться им. С файлом htcaccess могут возникнуть разные проблемы из-за не соблюдения правил. В php логика другая и работать легче. Используя советы с форума каждый их применяет на свой страх и риск, но судя по обсуждениям и мнениям программистов которые тут собрались, можно сделать вывод, что далеко не глупые люди тут сидят и большинство доработок нужны лишь в некоторых проектах. Решение которое я выложил выше является подсказкой для тех кому необходимо избавиться от дублей и не как не обязывает ни кого использовать данный метод у себя на сайте без необходимости. http://demo.simplacms.ru/ubiraem-sleshi-v-kontse-url-i-izbavlyaemsya-ot-dublej - скриноты можно по смотреть тут Quote Link to post Share on other sites
cernos Posted January 9, 2016 Report Share Posted January 9, 2016 (edited) Используйте .htaccess, метод написан выше здесь И дополню от себя, избавляемся от www.и www.sitename.ru/index.html (если он имеется) RewriteCond %{HTTP_HOST} ^www.sitename.ru$ [NC] RewriteRule ^(.*)$ http://sitename.ru/$1 [R=301,L] RewriteRule ^index.html$ http://sitename.ru/ [R=301,L] Edited January 9, 2016 by cernos Quote Link to post Share on other sites
4443345 Posted March 13, 2016 Report Share Posted March 13, 2016 Многие встречаются с проблемой дублей страниц, что в свою очередь негативно влияет на сайт при индексировании его поисковиками. Для того чтобы избавится от такой проблемы я использовал следующий код: // Убираем слеш в конце ссылок $uri = preg_replace("/\?.*/i",'', $_SERVER['REQUEST_URI']); if ((!strpos($uri, 'simpla')) && (strlen($uri)>1)) { if (rtrim($uri,'/')!=$uri) { header("HTTP/1.1 301 Moved Permanently"); header('Location: http://'.$_SERVER['SERVER_NAME'].str_replace($uri, rtrim($uri,'/'), $_SERVER['REQUEST_URI'])); exit(); } } Приведенный выше код необходимо поместить в файл index.php который находится в корне сайта. ~12 строка. Если у Вас есть решение по лучше, разместите его в ответах данной темы. Методы через .htcaccess мне не помогли и приходилось очень много править и выстраивать правила, что в моем случае было слишком напряжно. Скажите если у меня дописан рел каноникал в шаблоне, если вставить этот код, не создаст ли это конфликт или негативно не повлияет ли? Quote Link to post Share on other sites
masha Posted November 2, 2017 Report Share Posted November 2, 2017 помогло, спасибо Quote Link to post Share on other sites
a13x Posted November 30, 2017 Report Share Posted November 30, 2017 (edited) $serv_uri = $_SERVER["REQUEST_URI"];$uri = array_filter(explode("/", $serv_uri));if($serv_uri != "/" && substr($serv_uri, -1) == "/" && !strpos($serv_uri, 'simpla')){ header("Location: /".implode("/",$uri), true, 301); exit();} мой вариант, без preg_replace и str_replace.p.s. если у вас сервер работает на https то правильного редиректа не произойдёт т.к. вы привязались к "http".поэтому лучше ссылаться не указывая сервер и протокол, а если указываете протокол, то указывайте через REQUEST_SCHEME Edited November 30, 2017 by a13x Quote Link to post Share on other sites
miltonmors Posted November 30, 2017 Report Share Posted November 30, 2017 И чем этот вариант лучше? Если встретится адрес site.ru/products/with-simpla-inside/, то и не сработает Ваш метод.А в реальности админ такое заметит лишь после того, как поисковик дубль уже зафиксирует... Quote Link to post Share on other sites
a13x Posted November 30, 2017 Report Share Posted November 30, 2017 И чем этот вариант лучше? Если встретится адрес site.ru/products/with-simpla-inside/, то и не сработает Ваш метод.А в реальности админ такое заметит лишь после того, как поисковик дубль уже зафиксирует... if($serv_uri != "/" && substr($serv_uri, -1) == "/" && $ur[0] != 'simpla'))делов то.я написал выше чем изначальный вариант плох. Quote Link to post Share on other sites
miltonmors Posted November 30, 2017 Report Share Posted November 30, 2017 И чем же он плох? Тем, что использует preg_replace и str_replace? И с каких пор это считается большим недостатком? Quote Link to post Share on other sites
a13x Posted December 1, 2017 Report Share Posted December 1, 2017 (edited) И чем же он плох? Тем, что использует preg_replace и str_replace? И с каких пор это считается большим недостатком? если у вас сервер работает на https то правильного редиректа не произойдёт т.к. вы привязались к "http".поэтому лучше ссылаться не указывая сервер и протокол, а если указываете протокол, то указывайте через REQUEST_SCHEME+ к вышеизложенному, preg_replace также как и preg_match использует больше ресурсов. Да и зачем вобще в этом деле использовать эти функции? Всё что нам надо это узнать есть ли в конце слешь и какая категория идёт первая.+ считаю что вызов 6-ти функций, дольше чем вызов трёх (с учётом простой array_filter). Edited December 1, 2017 by a13x Quote Link to post Share on other sites
a13x Posted December 1, 2017 Report Share Posted December 1, 2017 Лучше обернуть в array_values чтобы сбросить ключи массива: $serv_uri = $_SERVER["REQUEST_URI"]; $uri = array_values(array_filter(explode("/", $serv_uri))); if($serv_uri != "/" && substr($serv_uri, -1) == "/" && $uri[0] != 'simpla')){ header("Location: /".implode("/",$uri), true, 301); exit(); } Quote Link to post Share on other sites
miltonmors Posted December 1, 2017 Report Share Posted December 1, 2017 + к вышеизложенному, preg_replace также как и preg_match использует больше ресурсов. Да и зачем вобще в этом деле использовать эти функции? Всё что нам надо это узнать есть ли в конце слешь и какая категория идёт первая.+ считаю что вызов 6-ти функций, дольше чем вызов трёх (с учётом простой array_filter). Формально Вы правы, но собственно экономия тут мизерная. В Вашем последнем варианте из #20 используется 5 функций: array_values, array_filter, explode, substr, implode. если уж наводить экономию, то как-то получше, примерно так: $serv_uri = $_SERVER["REQUEST_URI"]; if($serv_uri && substr($serv_uri, 0,7) !='/simpla'){ $uri = rtrim($serv_uri, "/"); if($serv_uri != $uri){ header("Location: ".$uri); exit(); } } Quote Link to post Share on other sites
a13x Posted December 3, 2017 Report Share Posted December 3, 2017 (edited) Согласен, либо просто не использовать array_filter и array_values и проверять по 1-ом индексу массива, а не по нулевому. $serv_uri = $_SERVER["REQUEST_URI"];$uri = explode("/", $serv_uri);if($serv_uri != "/" && substr($serv_uri, -1) == "/" && $uri[1] != 'simpla')){ header("Location: /".implode("/",$uri), true, 301); exit();}просто я в своей цмске изначально всегда разбивал строку по / и потом всё проверял, поэтому больше привык к такому методу.Собственно url rewrite который я пишу будет также работать. if($serv_uri....p.s. $serv_uri есть всегда, даже при загрузке индексной страницы он равен "/", поэтому эта проверка всегда будет возвращать true. Edited December 3, 2017 by a13x Quote Link to post Share on other sites
makki Posted February 12, 2018 Report Share Posted February 12, 2018 RewriteCond %{REQUEST_URI} !^/simpla RewriteRule (.+)/$ /$1 [L,R=301] Quote Link to post Share on other sites
Плохиш Posted February 12, 2018 Report Share Posted February 12, 2018 RewriteCond %{REQUEST_URI} !^/simpla RewriteRule (.+)/$ /$1 [L,R=301] Если встретится статичная страница с адресом, например, //site.ru/simpla_and_templates/, то не сработает правило. Quote Link to post Share on other sites
makki Posted February 12, 2018 Report Share Posted February 12, 2018 (edited) Разве такие страницы есть изначально в Simpla? Если решать это посредством PHP такой проблемы не будет? Edited February 12, 2018 by makki Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.