Перейти к содержанию
Официальный форум поддержки Simpla

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


Рекомендуемые сообщения

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

 

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

 

// Убираем слеш в конце ссылок
$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
Ссылка на сообщение
Поделиться на другие сайты

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

http://site.ru/products/administator-handbook/  

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

http://site.ru/products/administator-handbook/

 

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

 

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

Изменено пользователем Gregar
Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

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/ для нас выглядят одинаково, но для поисковика это дубли.

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Ссылка на сообщение
Поделиться на другие сайты


 

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



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



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



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

Изменено пользователем shin
Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

 

 

Дам совет который не даст ни кто здесь по ходу :-). Не

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

будет с кодом. Ни черта не исправляйте в симпла сами или по совету на форумах тапа

этой темы, которую часть продублирую:

 

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

очередь негативно влияет на сайт при индексировании его поисковиками. Для

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

 

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

 

И вот программисты как правило ни чего не понимающие в сео (не

хочу обидеть ни кого) начинают грызть косточку брошенную. Скажу так НЕТ В

СИМПЛА НИ КАКОЙ ПРОБЛЕМЫ С ДУБЛЕМ СТРАНИЦ! И НЕ МОЖЕТ БЫТЬ! Откройте для себя

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

либо занимайтесь сами - консультируйтесь и двигайтесь.  Ни в коем случае не исправляйте сео ядро

системы - чревато последствиями. Баловаться  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 - скриноты можно по смотреть тут

Ссылка на сообщение
Поделиться на другие сайты

Используйте .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
Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

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

 

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

 

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...
  • 4 недели спустя...

 

$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
Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

делов то.

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

Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

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

Изменено пользователем a13x
Ссылка на сообщение
Поделиться на другие сайты

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

 

Ссылка на сообщение
Поделиться на другие сайты

+ к вышеизложенному, 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();
	}
}
Ссылка на сообщение
Поделиться на другие сайты

Согласен, либо просто не использовать 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.

Изменено пользователем a13x
Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

 

RewriteCond %{REQUEST_URI} !^/simpla
RewriteRule (.+)/$ /$1 [L,R=301]

 

Если встретится статичная страница с адресом, например,  //site.ru/simpla_and_templates/,  то не сработает правило.

Ссылка на сообщение
Поделиться на другие сайты

Разве такие страницы есть изначально в Simpla?

 

Если решать это посредством PHP такой проблемы не будет?

Изменено пользователем makki
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...