Добавление Canonical на Инстанте

3451
Покопался немного в коде, вот что получилось.

Нужно добавить php код в файл шаблона template.php, в самый верх (рядом с другим php кодом)

Код PHP:
  $where = $_SERVER["REQUEST_URI"];  // адрес текущей страницы
  $q = strpos($where,'?');           // позиция символа "?"
  if ($q){ $canonical = substr($where,0,$q); //если страница с параметрами - отрезаем их
  }else{ $canonical = $where; }
  if ($canonical=='/'){$canonical='';}       //если главная, убираем слэщ в конце
  elseif ($canonical=='/index.php') {$canonical='';} //если главная, убираем index.php
 $canonical = 'http://'.$_SERVER['HTTP_HOST'].$canonical;
И в то место, где должен выводить canonical такой код
Код PHP:
<link rel="canonical" href="<?php echo $canonical; ?>"/>
У себя проверил, вроде все правильно работает. Поправьте если что не так.
Избавление от дублей страниц (?p=12) | Убираем пагинацию. Пакет дополнений.
Комментарии (29)
universe 20 марта 2012 в 18:34 +1
SJen 20 марта 2012 в 18:37 0
Вы что-то имели ввиду, кинув ссылку, или просто для информации?
universe 20 марта 2012 в 19:50 0
для информации =)
Anonim 20 марта 2012 в 19:56 0
Пустая страница по ссылке
Malanas 20 марта 2012 в 20:02 0
Нужно ссылку копировать и вставлять,а так режется...
reload 20 марта 2012 в 18:58 +1
SJen, респект!
отлично и правильно все работает!
сам код удачный или нет в написании и правильности не знаю но работает как доктор прописал)
Плюсище!
soxom 20 марта 2012 в 19:15 +3
Не знаю насколько это подойдет для моего проекта, но посмотрел на вашем сайте, проверил все ))) Классно, работает на 5! Если действительно без ошибок, то это наверное самое полезное введение что я видел для Инстанта в плане оптимизации. Огромный плюс
Malanas 20 марта 2012 в 20:23 0
Большое спасибо!!!
spacer 20 марта 2012 в 20:49 0
И в то место, где должен выводить canonical такой код
А где это место? Объясните слабым, пожалуйста. :)
SJen 20 марта 2012 в 21:34 0
между <head> и </head>
picaboo 20 марта 2012 в 21:37 0
в шабе template.php
секция <head>
eoleg 20 марта 2012 в 22:32 0
А как проверить?
lezginka.ru 20 марта 2012 в 22:37 0
вопрос кто разбирается.
мы тут бурю в стакане не устроили ?
кто реально "пострадал" от этой проблемы, можете показать(хотя бы в личку) ?
что-то мне не вериться, что ПС этих моментов не учитывают(проверить не могу, нет опыта и площадок).
буду очень признателен.
SJen 20 марта 2012 в 23:00 +1
Это важный момент, который однозначно говорит ПС, что разные адреса должны быть склеены. И решает куу проблем с дублями в индексе.

Можете верить или не верить, но для серьезного проекта это довольно важно и однозначно должно быть.
Hunter (Роман) 21 марта 2012 в 11:02 0
А если два доменных имени у сайта .ru и рф. - все равно дубли будут (под разными доменными именами) или эту проблему таким способом не решишь. Что можно сделать чтобы определялся клей двух доменов.
soxom 21 марта 2012 в 11:12 +1
Если два доменных имени, то в любом случае ставьте 301 ))) Это самое правильное решение
Hunter (Роман) 21 марта 2012 в 10:48 0
Да полезная вешь все действительно работает
Dinar 22 марта 2012 в 08:35 0
А появление страниц вида http://сайт.ру/раздел/сайт.ru - тоже с этим связано?

у меня куча страницы с ошибкой 404 в Я.вебмастере
soxom 22 марта 2012 в 13:47 0
В каноникале от SJen есть маленькие недочеты (исправляются редиректами), но 404 это точно не из этой оперы
FreeLancer 22 марта 2012 в 13:54 0
Что за недочеты? smile И подскажите сразу решение раз уж знаете)
SJen 22 марта 2012 в 14:07 +1
я бы связал это с кривыми ссылками на сайте, вы значит сами отдаете Яндексу такие ссылки, а он их индексит
FreeLancer 22 марта 2012 в 15:30 0
хм.. досада.. у меня на сайте самописный компонент, куда передаются ссылки с параметрами через "?". Можно конечно делать поиск по подстроке REQUEST_URI и в нужном месте не обрезать ее, хотя компонент все равно думаю переделывать под другие ссылки. Поэтому с каноникалом мне придется повременить..

P.S. к СЕО-шникам, подскажите пожалуйста.. если я изменю вид ссылок, но прошлый контент останется также и по старым ссылкам (на сайте старых ссылок не останется, они будут лишь в индексе поисковиков), будут ли такие ссылки считаться дублем?
SJen 22 марта 2012 в 15:41 0
будут, до момента полного выпадения старых ссылок из индекса - надо 301 редирект со старых сделать. У яндекса старые ссылки могут еще очень долго болтаться.. Я помню у себя менял юрлы - больше месяца старые виседи в Яще.
FreeLancer 22 марта 2012 в 16:13 0
хм... ну месяц то ладно)
NickSolver 23 марта 2012 в 09:35 0
404 страницы всегда можно побыстренькому покикать из индекса. Через удаление страницы в вебмастере.
FreeLancer 23 марта 2012 в 10:35 +1
хм, как можно по быстренькому покикать 10000 страниц? )
Bubble Gumoff 7 ноября 2012 в 22:20 0
Вводим так если
site.ru////stati

Получаем
<link rel="canonical" href="http://www.site.ru/////stati"/>;

Тут как быть?
reload 25 ноября 2012 в 00:37 +1
SJen, так понимаю для 1.10 все без изменений вроде?
fotpod 26 декабря 2013 в 21:23 0
Спасибо SJen, все получилось, но есть еще очень не приятные дубли в форуме, например:
Код PHP:
  1. ../thead10.html и ../thead10-1.html
я его излечил вставив пару строк в твой код, я вообще не прогер, поэтому не судите строго
Код PHP:
  1.  
  2. $where = $_SERVER["REQUEST_URI"]; // адрес текущей страницы
  3. $q = strpos($where,'?'); // позиция символа "?"
  4. $q1 = strpos($where,'-1.html'); // позиция "-1.html"
  5. if ($q){ $canonical = substr($where,0,$q); //если страница с параметрами - отрезаем их
  6. }else{ $canonical = $where; }
  7. if ($q1){ $canonical = substr($where,0,$q1).'.html'; //если страница с параметрами - отрезаем их и добавляем .html
  8. }else{ $canonical = $where; }
  9. if ($canonical=='/'){$canonical='';} //если главная, убираем слэщ в конце
  10. elseif ($canonical=='/index.php') {$canonical='';} //если главная, убираем index.php
  11. $canonical = 'http://'.$_SERVER['HTTP_HOST'].$canonical;
  12. ?>
  13.  
вторая часть кода остается без изменений.