Тема: Все о мета-теге Canonical (канонизация (борьба с дублями) ссылок)  (Прочитано 5430 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн moto

  • Выше солнца
  • *****
  • Сообщений: 16992
  • Поблагодарили: 140 раз(а)
  • Уважение: +128/-0
    • Просмотр профиля
На многих сайтах одно и то же содержание можно найти по разным URL (дубли ссылок). Предположим, у вас есть сайт по продаже одежды и наиболее популярный товар – зеленое платье. На страницу этого товара можно попасть по разным URL, особенно если у вас используются идентификаторы сеанса либо другие параметры:

http://www.example.com/products/women/dresses
http://www.example.com/products?category=dresses&color=green&cruel=no
http://example.com/shop/index.php?product_id=32&highlight=green+dress&cat_id=1&sessionid=123&affid=431
http://example.com/dresses/cocktail?gclid=ABCD
http://www.example.com/dresses/greendress.html

Чтобы более эффективно управлять показом своих URL в результатах поиска и повысить их популярность, рекомендуется выбрать предпочитаемую версию страницы и задать ее URL как канонический (основной). Вы можете указать свои предпочтения для поисковых систем разными способами. Все эти способы являются рекомендуемыми, но не обязательными. Если вы не укажете канонический URL, поисковые роботы попытаются определить его самостоятельно.

Возможные варианты борьбы с дублями страниц:

1. Задайте основной домен
Указав основной домен, вы тем самым сообщите поисковым системам, какой URL (http://www.example.com или http://example.com) более предпочтителен.
Если вы укажете домен http://example.com в качестве основного, поисковые роботы будут обрабатывать ссылки на http://www.example.com точно так же, как и ссылки на основной домен. (кстати, основной домен нужно так же прописать в robots.txt)

2. Укажите каноническую ссылку для всех версий страницы
Если нужно сделать http://www.example.com/platya/zeleniye.html каноническим URL, вы можете указать его для поисковых систем, добавив элемент <link> с атрибутом rel="canonical" в раздел <head> неканонических страниц. Для этого создавайте ссылки следующим образом:
<link rel="canonical" href="http://www.example.com/platya/zeleniye.html">
Добавьте этот тег в раздел <head> страниц с неканоническими URL.

http://example.com/dresses/greendress.html?gclid=ABCD
http://example.com/dresses/index.php?product_id=32&highlight=green+dress&cat_id=1&sessionid=123

Теперь поисковые роботы будет знать, что все эти URL относятся к канонической странице с адресом http://www.example.com/platya/zelenoyeplatye.html. Примечание. Google рекомендует использовать ссылку с атрибутом rel="canonical", чтобы указать предпочитаемый URL, но, как он говорит, не может гарантировать, что переходы всегда будут осуществляться по этому адресу.

3. Используйте переадресацию 301
Если на страницу можно попасть несколькими способами, например с помощью ссылок http://example.com/home, http://home.example.com или http://www.example.com, бывает удобно выбрать один из этих URL-адресов в качестве основного (канонического) и использовать переадресацию 301 для перенаправления на него трафика с других URL. Переадресация 301 на стороне сервера – это лучший способ обеспечить переход пользователей и поисковых систем на нужную страницу. Код статуса 301 означает, что запрашиваемая страница окончательно перемещена в новое местоположение.

Чтобы установить переадресацию 301 для сайтов, размещенных на серверах Apache, необходимо внести изменения в файл сервера .htaccess (создается в корне сайта) (В помощь учебное пособие по созданию .htaccess+ руководство по изменению URL-адресов для Apache)

4. Укажите способ обработки динамических параметров
Используйте обработку параметров, чтобы сообщить Google о параметрах, которые следует игнорировать. Пропуск этих параметров позволяет сократить количество повторяющихся материалов в индексе Google и упрощает сканирование сайта. Например, если указать, что нужно проигнорировать параметр sessionid, Google будет считать, что материалы на страницах www.example.com/dresses/green.htm?sid=273749 и www.example.com/dresses/green.htm совпадают.

5. Укажите каноническую ссылку в HTTP-заголовке   
Если у вас есть доступ к настройкам сервера, можно использовать атрибут rel="canonical" в HTTP-заголовках, чтобы указать канонический URL для документов в формате HTML и файлов других типов, например PDF. Предположим, что один и тот же файл PDF на вашем сайте доступен по следующим URL (например, с целью отслеживания):

http://www.example.com/downloads/white-paper.pdf
http://www.example.com/downloads/partner-1/white-paper.pdf
http://www.example.com/downloads/partner-2/white-paper.pdf
http://www.example.com/downloads/partner-3/white-paper.pdf

В этом случае можно сообщить Google, какой из URL-адресов данного файла следует считать каноническим, указав HTTP-заголовок rel="canonical", как показано ниже:
Link: <http://www.example.com/downloads/white-paper.pdf>; rel="canonical"
« Последнее редактирование: 17 Январь 2013, 09:48:50 от moto »
https://irongamers.ru - сообщество любителей компьютерных игр
 


Оффлайн moto

  • Выше солнца
  • *****
  • Сообщений: 16992
  • Поблагодарили: 140 раз(а)
  • Уважение: +128/-0
    • Просмотр профиля
Добавляем rel="canonical" в шаблоны материалов Joomla 1.7 - 2.5

Во все файлы шаблона, КРОМЕ index.php, и html/com_content/form/edit.php, добавлено условие запрета генерации ссылки каноникал для главной страницы.
Это сделанно для избежания дублирования ссылки каноникал на главной и редиректа, если в качестве главной указывается определенный материал.

Убираем дубли :)

Ссылка Canonical для главной страницы.
Открываем файл templates/МОЙ ШАБЛОН/index.php
показать/скрыть
после
// No direct access.
defined('_JEXEC') or die;

Вставляем
// ------------ Start Canonical-Mod
$document = JFactory::getDocument();
$mainmenu =& JSite::getMenu();
if($mainmenu->getActive() == $mainmenu->getDefault()) :
$livesite = substr_replace(JURI::root(), '', -1, 1);
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart>0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже.
//$docpagenr = '?start='.$docstart;
endif;
//$docroute = JRoute::_('index.php?Itemid='.$mainmenu->getDefault()->id);
// Если в качестве канонической ссылки хотим использовать системную ссылку Joomla типа http://мойсайт.рф/home.html , то раскомментируем сроку выше, и закомментируем строку ниже.
$docroute = '/';
$document->addHeadLink( $livesite . $docroute . $docpagenr, 'canonical', 'rel', '' );
endif;
// ------------ End Canonical-Mod

Ссылка Canonical для страниц компонента материалов (com_content)
Открываем файл templates/МОЙ ШАБЛОН/html/com_content/archive/default.php
показать/скрыть
после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');

вставляем
// ------------ Start Canonical-Mod
$mainmenu =& JSite::getMenu();
if($mainmenu->getActive()!== $mainmenu->getDefault()) :
$app = JFactory::getApplication();
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart>0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница архива
//$docpagenr = '?start='.$docstart;
endif;
$docroute = JRoute::_('index.php?Itemid='.$app->getMenu()->getActive()->id);
 
$document->addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

Открываем файл templates/МОЙ ШАБЛОН/html/com_content/article/default.php
показать/скрыть
после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
добавляем
// ------------ Start Canonical-Mod
$mainmenu =& JSite::getMenu();
if($mainmenu->getActive()!== $mainmenu->getDefault()) :
$requrl = trim($_SERVER['REQUEST_URI']);
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart>0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница материала
//$docpagenr = '?start='.$docstart;
endif;
$docroute = $this->item->readmore_link;
 
// Начало проверки системной ссылки в запросе. (для редиректа 301 или отдачи ошибки 404.)
(bool)$valideurl = strpos( $requrl, $docroute );
if ($valideurl === false) :
header("HTTP/1.1 301 Moved Permanently");
header("Location: " . $livesite . $docroute);
header("Connection: close");
exit();
// Если хотим отдать ошибку 404, то закомментируем 4 строки выше этой, и раскомментируем 1 сроку ниже.
//JError::raiseError(404, JText::_('PAGE COULD NOT BE FOUND'));
endif;
// Конец проверки системной ссылки в запросе.
 
$document->addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

Открываем файл templates/МОЙ ШАБЛОН/html/com_content/categories/default.php
показать/скрыть
после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers');
добавляем
// ------------ Start Canonical-Mod
$mainmenu =& JSite::getMenu();
if($mainmenu->getActive()!== $mainmenu->getDefault()) :
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart>0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница категории
//$docpagenr = '?start='.$docstart;
endif;
 
$docroute = JRoute::_(ContentHelperRoute::getCategoryRoute($this->parent->id));
 
$document->addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

Открываем файл templates/МОЙ ШАБЛОН/html/com_content/category/blog.php
показать/скрыть
после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers');
вставляем
// ------------ Start Canonical-Mod
$mainmenu =& JSite::getMenu();
if($mainmenu->getActive()!== $mainmenu->getDefault()) :
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart>0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница категории
//$docpagenr = '?start='.$docstart;
endif;
 
$docroute = JRoute::_(ContentHelperRoute::getCategoryRoute($this->category->id));
 
$document->addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

Открываем файл templates/МОЙ ШАБЛОН/html/com_content/category/default.php
показать/скрыть
после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers');
вставляем
// ------------ Start Canonical-Mod
$mainmenu =& JSite::getMenu();
if($mainmenu->getActive()!== $mainmenu->getDefault()) :
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart>0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница категории
//$docpagenr = '?start='.$docstart;
endif;
 
$docroute = JRoute::_(ContentHelperRoute::getCategoryRoute($this->category->id));
 
$document->addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

Открываем файл templates/МОЙ ШАБЛОН/html/com_content/featured/default.php
показать/скрыть
после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
вставляем
// ------------ Start Canonical-Mod
$mainmenu =& JSite::getMenu();
if($mainmenu->getActive()!== $mainmenu->getDefault()) :
$app = JFactory::getApplication();
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart>0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница архива
//$docpagenr = '?start='.$docstart;
endif;
$docroute = JRoute::_('index.php?Itemid='.$app->getMenu()->getActive()->id);
 
$document->addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

Необязательный шаг. Чисто для указания запрета индексации формы добавления/редактирования материала.
Открываем файл templates/МОЙ ШАБЛОН/html/com_content/form/edit.php
показать/скрыть
после
// Create shortcut to parameters.
$params = $this->state->get('params');
вставляем
$document = & JFactory::getDocument();
$document->setMetadata('robots', 'noindex, nofollow');

Как дополнение желательно делать запрет на индексацию страниц с параметрами ?limitstart и ?limit добавив их в файл robots.txt
Disallow: *?limitstart
Disallow: *?limit

Для тех у кого нет файлов-шаблонов в templates/МОЙ ШАБЛОН/html/com_content/ и они не знают где их взять
показать/скрыть
копируем components/com_content/views/archive/tmpl/default.php в templates/МОЙ ШАБЛОН/html/com_content/archive/default.php
копируем components/com_content/views/article/tmpl/default.php в templates/МОЙ ШАБЛОН/html/com_content/article/default.php
копируем components/com_content/views/categories/tmpl/default.php в templates/МОЙ ШАБЛОН/html/com_content/categories/default.php
копируем components/com_content/views/category/tmpl/blog.php в templates/МОЙ ШАБЛОН/html/com_content/category/blog.php
копируем components/com_content/views/category/tmpl/default.php в templates/МОЙ ШАБЛОН/html/com_content/category/default.php
копируем components/com_content/views/featured/tmpl/default.php в templates/МОЙ ШАБЛОН/html/com_content/featured/default.php
копируем components/com_content/views/form/tmpl/edit.php в templates/МОЙ ШАБЛОН/html/com_content/form/edit.php
« Последнее редактирование: 17 Январь 2013, 12:10:22 от moto »
https://irongamers.ru - сообщество любителей компьютерных игр
 

Оффлайн moto

  • Выше солнца
  • *****
  • Сообщений: 16992
  • Поблагодарили: 140 раз(а)
  • Уважение: +128/-0
    • Просмотр профиля
Для Wordpess

Устанавливаем  Плагин All-in-One SEO pack -ставим в настройках галочку на Canonical URLs  (канонические ссылки)
https://irongamers.ru - сообщество любителей компьютерных игр
 

Оффлайн moto

  • Выше солнца
  • *****
  • Сообщений: 16992
  • Поблагодарили: 140 раз(а)
  • Уважение: +128/-0
    • Просмотр профиля
Canonical для SMF

Самый простой способ, это установка мода Optimus Brave

Описание

В дополнение к Optimus Brave ставим мод Anti-SID canonical tag - without PHPSESSID param, который позволяет убрать переменную сессии из канонических адресов страниц, т.е если страницы вашего форума попадают в индекс с адресами, содержащими переменную сессии (PHPSESSID), воспользуйтесь этим модом.
https://irongamers.ru - сообщество любителей компьютерных игр
 

Оффлайн motosimak

  • Ветеран-элита
  • *****
  • Сообщений: 5487
  • Поблагодарили: 3 раз(а)
  • Уважение: +11/-0
  • Пол: Мужской
    • Просмотр профиля
В joomla 3, разработчики уже встроили тег в шаблон, так что манипуляции с шаблонами уже не нужны


Оффлайн constant13

  • Новичок
  • *
  • Сообщений: 32
  • Уважение: +0/-0
    • Просмотр профиля
ничего не понял, если честно, понял что штука полезная и нужная, так что пора топать на биржу фриланса )))
 

Оффлайн Ольга Копанина

  • Ученик
  • **
  • Сообщений: 229
  • Уважение: +1/-0
    • Просмотр профиля
Как по мне, то этот мега- тег совершенно не нужная вещь, так как Яндекс на него не реагирует. Остаётся два варианта борьбы:
1. оставить всё как есть.
2. бороться старым проверенным способом.
 

 


Поиск

 
SimplePortal 2.3.6 © 2008-2014, SimplePortal