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


Фото
* * * * * 1 голосов

Убираем слэш(и) в конце url и избавляемся от дублей

дубли url слеш слэш php index.php

  • Чтобы отвечать, сперва войдите на форум
30 ответов в теме

#1 Gregar

Gregar
  • Пользователь
  • 110 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 20.12.2015 - 13:58

Многие встречаются с проблемой дублей страниц, что в свою очередь негативно влияет на сайт при индексировании его поисковиками. 

 

Для того чтобы избавится от такой проблемы я использовал следующий код:

 

// Убираем слеш в конце ссылок
$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 мне не помогли и приходилось очень много править и выстраивать правила, что в моем случае было слишком напряжно. 


Изменено: Gregar, 20.12.2015 - 14:31


#2 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 20.12.2015 - 14:15

Если в URL товара встретится 'admin', то работать на такой странице не будет, например

http://site.ru/produ...tator-handbook/  

 

И вообще непонятно, зачем нужно условие !strpos($uri, 'admin')  По-моему, его можно безболезненно удалить.



#3 Gregar

Gregar
  • Пользователь
  • 110 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 20.12.2015 - 14:26

Если в URL товара встретится 'admin', то работать на такой странице не будет, например

http://site.ru/produ...tator-handbook/

 

И вообще непонятно, зачем нужно условие !strpos($uri, 'admin')  По-моему, его можно безболезненно удалить.

 

Верное замечание. Скорее всего логичнее изменить на simpla чтобы мы не теряли возможность входа в админку. 


Изменено: Gregar, 20.12.2015 - 14:32


#4 mishanya

mishanya
  • Фрилансер
  • 2 552 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 20.12.2015 - 14:53

а есть ли смысл? для страницы со слешами выдается канонический юрл без слеша



#5 Gregar

Gregar
  • Пользователь
  • 110 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 20.12.2015 - 16:09

а есть ли смысл? для страницы со слешами выдается канонический юрл без слеша

 

Смысл есть в том случае если вы занимаетесь сео оптимизацией сайта. Если для Вас это не важно или сайт содержит мало товаров и услуг, то в этом случае я думаю хватит и того, что имеется стандартно. Хотя лишним это не будет.



#6 mishanya

mishanya
  • Фрилансер
  • 2 552 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 20.12.2015 - 17:25

Смысл есть в том случае если вы занимаетесь сео оптимизацией сайта. Если для Вас это не важно или сайт содержит мало товаров и услуг, то в этом случае я думаю хватит и того, что имеется стандартно. Хотя лишним это не будет.

 

да, я не СЕО-шник и не знаю, просто интересуюсь. тоесть каноникл не решает в полной мере проблему таких дублей?



#7 Gregar

Gregar
  • Пользователь
  • 110 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 20.12.2015 - 20:28

да, я не СЕО-шник и не знаю, просто интересуюсь. тоесть каноникл не решает в полной мере проблему таких дублей?

 

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

 

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

 

К примеру если мы в каталоге товаров перейдем на вторую страницу, мы увидем в адресной строке такую ссылку: 

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.simplacm...570-galaxy-mini и страница: http://demo.simplacm...70-galaxy-mini/ для нас выглядят одинаково, но для поисковика это дубли.



#8 stasok

stasok
  • Пользователь
  • 1 сообщений
  • Дизайн, Программирование, Верстка, Пользователь
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 21.12.2015 - 13:16

Как то делал - убирал конечный слеш в ШопСкрипте. Лет 5 назад. Вроде работало красиво через "ейчтиаксес".

По пагинации. Есть статья на СеоПрофи хорошая.

Я делал сразу по двум вариантам. И next, prec + каноникал на первую страницу(на страницах 2+) - без page-1.

Закрывал в роботсе страницы пагинации. И ещё тоже самое только без prev, next - на page-all.



#9 Julius123

Julius123
  • Пользователь
  • 249 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 21.12.2015 - 13:51

У меня вот такой редирект стоит и прекрасно работает. Зачем править код?

 

# Редирект на адреса без слеша
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
 

 



#10 shin

shin
  • Пользователь
  • 12 сообщений

Опубликовано 25.12.2015 - 19:53


 

Дам совет который не даст ни кто здесь по ходу :-). Не
играйтесь с огнём ребята:-) Не знаете, не уверены, не делайте, пусть всё так и
будет с кодом. Ни черта не исправляйте в симпла сами или по совету на форумах тапа
этой темы, которую часть продублирую:



Многие встречаются с проблемой дублей страниц, что в свою
очередь негативно влияет на сайт при индексировании его поисковиками. Для
того чтобы избавится от такой проблемы я использовал следующий код:



ну и некий код даже обсуждаемый.



И вот программисты как правило ни чего не понимающие в сео (не
хочу обидеть ни кого) начинают грызть косточку брошенную. Скажу так НЕТ В
СИМПЛА НИ КАКОЙ ПРОБЛЕМЫ С ДУБЛЕМ СТРАНИЦ! И НЕ МОЖЕТ БЫТЬ! Откройте для себя
Вебмастер гугл хотя б. Главное для вашей оптимизации  сайта уникальный контент и правильные метаданные данные, про которые можете почитать в инете, а вот это нужно предоставить либо профи
либо занимайтесь сами - консультируйтесь и двигайтесь.  Ни в коем случае не исправляйте сео ядро
системы - чревато последствиями. Баловаться  c htaccess или robots.txt это
одно, однако тоже нужно подходить с умом используя рекомендации яндекс и гугл в
вебмастере. Могу здесь много писать про дубли ссылок, хлебные якобы правильные
крошки и пагинацию страниц, простите за русский, фильтр симпла, сортировку,
каноникал, большую карту сайта более 50 000 товаров,  нормальный её вывод якобы нужный на сайте в html
и прочее, но не хочу, ибо это маленькие проблемы симпла и это в целом для раскрутки
сайта не так уж и важно!!!


Изменено: shin, 25.12.2015 - 20:13


#11 Gregar

Gregar
  • Пользователь
  • 110 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 09.01.2016 - 22:09


 

Дам совет который не даст ни кто здесь по ходу :-). Не
играйтесь с огнём ребята:-) Не знаете, не уверены, не делайте, пусть всё так и
будет с кодом. Ни черта не исправляйте в симпла сами или по совету на форумах тапа
этой темы, которую часть продублирую:



Многие встречаются с проблемой дублей страниц, что в свою
очередь негативно влияет на сайт при индексировании его поисковиками. Для
того чтобы избавится от такой проблемы я использовал следующий код:



ну и некий код даже обсуждаемый.



И вот программисты как правило ни чего не понимающие в сео (не
хочу обидеть ни кого) начинают грызть косточку брошенную. Скажу так НЕТ В
СИМПЛА НИ КАКОЙ ПРОБЛЕМЫ С ДУБЛЕМ СТРАНИЦ! И НЕ МОЖЕТ БЫТЬ! Откройте для себя
Вебмастер гугл хотя б. Главное для вашей оптимизации  сайта уникальный контент и правильные метаданные данные, про которые можете почитать в инете, а вот это нужно предоставить либо профи
либо занимайтесь сами - консультируйтесь и двигайтесь.  Ни в коем случае не исправляйте сео ядро
системы - чревато последствиями. Баловаться  c htaccess или robots.txt это
одно, однако тоже нужно подходить с умом используя рекомендации яндекс и гугл в
вебмастере. Могу здесь много писать про дубли ссылок, хлебные якобы правильные
крошки и пагинацию страниц, простите за русский, фильтр симпла, сортировку,
каноникал, большую карту сайта более 50 000 товаров,  нормальный её вывод якобы нужный на сайте в html
и прочее, но не хочу, ибо это маленькие проблемы симпла и это в целом для раскрутки
сайта не так уж и важно!!!

 

Как показывает практика, в Simpla CMS все сделано хорошо, но нужно все равно работать и работать над системой для того чтобы достигать результатов. Дубли в Simpla CMS есть как в yandex так и в google. Вы написали выше то, что и так каждый знает, а форум для того и создан чтобы решать проблему. Можно написать редиректы в htcaccess, а можно в php коде. Тут уже дело каждого чем удобнее пользоваться им.

 

С файлом htcaccess могут возникнуть разные проблемы из-за не соблюдения правил. В php логика другая и работать легче. 

 

Используя советы с форума каждый их применяет на свой страх и риск, но судя по обсуждениям и мнениям программистов которые тут собрались, можно сделать вывод, что далеко не глупые люди тут сидят и большинство доработок нужны лишь в некоторых проектах.

 

Решение которое я выложил выше является подсказкой для тех кому необходимо избавиться от дублей и не как не обязывает ни кого использовать данный метод у себя на сайте без необходимости.

 

http://demo.simplacm...emsya-ot-dublej - скриноты можно по смотреть тут



#12 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 10.01.2016 - 01:07

Используйте .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]

Изменено: cernos, 10.01.2016 - 01:09


#13 4443345

4443345
  • Пользователь
  • 62 сообщений
  • Дизайн, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 13.03.2016 - 13:44

Многие встречаются с проблемой дублей страниц, что в свою очередь негативно влияет на сайт при индексировании его поисковиками. 

 

Для того чтобы избавится от такой проблемы я использовал следующий код:

 

// Убираем слеш в конце ссылок
$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 мне не помогли и приходилось очень много править и выстраивать правила, что в моем случае было слишком напряжно. 

Скажите если у меня дописан рел каноникал в шаблоне, если вставить этот код, не создаст ли это конфликт или негативно не повлияет ли?



#14 masha

masha
  • Пользователь
  • 1 сообщений
  • Пользователь

Опубликовано 02.11.2017 - 12:35

помогло, спасибо



#15 a13x

a13x
  • Забаненый
  • 213 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 30.11.2017 - 18:15

$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


Изменено: a13x, 30.11.2017 - 18:30


#16 miltonmors

miltonmors
  • Забаненый
  • 91 сообщений
  • Программирование
  • Версия CMS:2.x
  • Откуда:Николаев

Опубликовано 30.11.2017 - 19:09

И чем этот вариант лучше? Если встретится адрес site.ru/products/with-simpla-inside/, то и не сработает Ваш метод.

А в реальности админ такое заметит лишь после того, как поисковик дубль уже зафиксирует...



#17 a13x

a13x
  • Забаненый
  • 213 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 30.11.2017 - 20:01

И чем этот вариант лучше? Если встретится адрес site.ru/products/with-simpla-inside/, то и не сработает Ваш метод.

А в реальности админ такое заметит лишь после того, как поисковик дубль уже зафиксирует...

if($serv_uri != "/" && substr($serv_uri, -1) == "/" && $ur[0] != 'simpla'))

делов то.

я написал выше чем изначальный вариант плох.



#18 miltonmors

miltonmors
  • Забаненый
  • 91 сообщений
  • Программирование
  • Версия CMS:2.x
  • Откуда:Николаев

Опубликовано 30.11.2017 - 20:13

И чем же он плох? Тем, что использует  preg_replace и str_replace? И с каких пор это считается большим недостатком?



#19 a13x

a13x
  • Забаненый
  • 213 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 01.12.2017 - 11:18

И чем же он плох? Тем, что использует  preg_replace и str_replace? И с каких пор это считается большим недостатком?

если у вас сервер работает на https то правильного редиректа не произойдёт т.к. вы привязались к "http".

поэтому лучше ссылаться не указывая сервер и протокол, а если указываете протокол, то указывайте через REQUEST_SCHEME

+ к вышеизложенному, preg_replace также как и preg_match использует больше ресурсов. Да и зачем вобще в этом деле использовать эти функции? Всё что нам надо это узнать есть ли в конце слешь и какая категория идёт первая.

+ считаю что вызов 6-ти функций, дольше чем вызов трёх (с учётом простой array_filter).


Изменено: a13x, 01.12.2017 - 11:27


#20 a13x

a13x
  • Забаненый
  • 213 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 01.12.2017 - 12:29

Лучше обернуть в 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();
}
 

 







Также с меткой «дубли, url, слеш, слэш, php, index.php»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых