Основной курс по Joomla
0 Пользователей и 1 Гость просматривают эту тему.
  • 127 Ответов
  • 25825 Просмотров
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
Пост обновлен 07.04.2012
Добавлен код генерации ссылки каноникал для главной страницы сайта.
Во все файлы шаблона, КРОМЕ com_k2/templates/default/itemform.php, добавлено условие запрета генерации ссылки каноникал для главной страницы.
Это сделанно для избежания дублирования ссылки каноникал на главной странице и редиректа, если в качестве главной указывается определенный материал.

Что такое каноническая страница? Зачем нужно указывать rel="canonical"?
Спойлер
[свернуть]

Приступим к убийству страниц-дублей.
1. Не используйте ссылку тега base в качестве canonical! Это вредно.
2. Читайте комментарии в коде.
3. Нашли ошибку? Пишите, попробуем разобраться.
4. При обновлении заменяем весь код находящийся между строками
Код
// ------------ Start Canonical-Mod
и
Код
// ------------ End Canonical-Mod


Ссылка Canonical для главной страницы сайта
!-!-! Если идентичные изменения для главной уже делались по описанию на странице Добавляем rel="canonical" в шаблоны материалов Joomla 1.7 - 2.5, то этот шаг пропускаем!
Открываем файл templates/МОЙ ШАБЛОН/index.php
Спойлер
[свернуть]

Открываем файл components/com_k2/templates/default/category.php
Спойлер
[свернуть]

Открываем файл components/com_k2/templates/default/item.php
Спойлер
[свернуть]

Открываем файл components/com_k2/templates/default/latest.php
Спойлер
[свернуть]

Открываем файл components/com_k2/templates/default/tag.php
Спойлер
[свернуть]

Открываем файл components/com_k2/templates/default/user.php
Спойлер
[свернуть]

Необязательное дополнение для указания запрета индексации форм добавления материала.
Открываем файл components/com_k2/templates/default/itemform.php
Спойлер
[свернуть]

Ну и, если мы не хотим каждый раз после обновления К2 вносить эти изменения в шаблоны,
копируем папку components/com_k2/templates/default
в папку шаблона Joomla templates/МОЙ ШАБЛОН/html/com_k2/templates/default

PS. Следите за обновлениями поста, возможны поправки!
« Последнее редактирование: 04.01.2013, 15:53:06 от AmdAveO »
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

vodka_pivo

  • Осваиваюсь на форуме
  • ***
  • 57
  • 5
  • Ёрш
Re: rel=”canonical” - теперь и в Yandex
« Ответ #1 : 10.11.2011, 06:23:40 »
Говорим спасибы Skitalec, код работает.

Измененные файлы в прикрепленном архиве.

[вложение удалено Администратором]
« Последнее редактирование: 11.11.2011, 05:06:19 от vodka_pivo »
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #2 : 11.11.2011, 04:32:33 »
vodka_pivo
Переделал инструктаж учтя твои замечания и внес еще дополнения.
Тестим дальше  ;)
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

vodka_pivo

  • Осваиваюсь на форуме
  • ***
  • 57
  • 5
  • Ёрш
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #3 : 11.11.2011, 05:39:54 »
Все ОК! Работает.
Если ссылка существует и правильная, то rel="canonical" выставляется правильно.

Т.к. в К2 ссылка формируется по ИД то
если после ид изменить путь, т.е. из существующей ссылки сделать несуществующую, то отдает 404 ошибку.

Правильная ссылка на категорию выглядит примерно так
http://сайт.ру/главный-пункт-меню/itemlist/category/11-название-категории.html
Если перейти по ссылке (по заведомо неправильной)
http://сайт.ру/главный-пункт-меню/itemlist/11-название-категории.html
то тэг каноникал имеется на ней тоже. Хотя такой ссылки быть не должно.

Если http://сайт.ру/главный-пункт-меню/category/11-название-категории.html
то 404 ошибка. Тут все верно.
« Последнее редактирование: 14.11.2011, 12:03:33 от vodka_pivo »
*

vodka_pivo

  • Осваиваюсь на форуме
  • ***
  • 57
  • 5
  • Ёрш
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #4 : 11.12.2011, 18:33:54 »
Проблемы с разбивкой на страницы.
Переход по ссылкам страниц 2,3,4 ... и т.д работает, а вот когда жмешь ссылку "В начало" или "1" то 404 ошибка.

Решение простое.
Комментируем или удаляем кусок кода в файле components/com_k2/templates/default/category.php
Код
if ( $valideurl === false) :
// отдаем ошибку 404
JError::raiseError(404, JText::_('K2_CATEGORY_NOT_FOUND'));
endif;


Теперь пор канонический тег.
Категория настроена так, чтобы выводить на одной страницы 12 материалов.
Если переходить по ссылкам "2,3,4" то ссылка на каждой странице выглядит так:
<link href="http://сайт.ru/nazvanie-kategorii.html" rel="canonical" />
если вернуться на страницу "1" то:
<link href="http://сайт.ru/nazvanie-kategorii.html?limitstart=0" rel="canonical" />

Если переходить по ссылкам "Вперед, Назад" то каноническая на всех страницах имеет вид:
<link href="http://сайт.ru/nazvanie-kategorii.html?limit=12" rel="canonical" />
если вернуться на первую, то:
<link href="http://сайт.ru/nazvanie-kategorii.html?limit=12&amp;limitstart=0" rel="canonical" />

Получается что неверно ссылка выставляется.
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #5 : 11.12.2011, 23:06:14 »
vodka_pivo
Упростил код для components/com_k2/templates/default/category.php, см. первый пост.
Добавил возможность вставки в каноникал постраничной разбивки, но закомментировал эту строку. Кому нужно раскомментирует. По мне так это вредно))

Пы.Сы. В последних версиях Joomla криво генерятся ссылки "В начало" и на страницу "1", в них прописывается "limitstart=0"
Это косается не только К2.
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

vodka_pivo

  • Осваиваюсь на форуме
  • ***
  • 57
  • 5
  • Ёрш
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #6 : 12.12.2011, 15:53:52 »
Теперь каноническая ссылка вида:
<link href="http://site.ru/kategoriya/itemlist/category/-.html" rel="canonical" />
а должна быть
<link href="http://site.ru/kategoriya.html" rel="canonical" />


Если раскомментировать строку то тег ставится правильно, только сама ссылка неправильная.
Первая страница категории:
<link href="http://site.ru/kategoriya/itemlist/category/-.html" rel="canonical" />
Вторая и третья страницы имеют тег:
<link href="http://site.ru/kategoriya/itemlist/category/-.html?start=12" rel="canonical" />
<link href="http://site.ru/kategoriya/itemlist/category/-.html?start=24" rel="canonical" />
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #7 : 12.12.2011, 16:01:47 »
Хмм, а кэш чистил? Какая версия Joomla и К2?
У меня нормально выводит в J1.7.3 с последним К2
1. категория нулевой вложености
Код
<link href="http://joomla17.loc/news3.html" rel="canonical" />
2. категория вложена в первую категорию
Код
<link href="http://joomla17.loc/news/itemlist/category/3-news2.html" rel="canonical" />
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

vodka_pivo

  • Осваиваюсь на форуме
  • ***
  • 57
  • 5
  • Ёрш
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #8 : 12.12.2011, 19:47:46 »
Ссылка создается в стандартном меню, тип К2 » Категории
Если в настройке ссылки указана одна категория то все работает как у вас.
А если выбраны несколько категорий то как описал выше. =(
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #9 : 12.12.2011, 20:57:49 »
Тогда возвращаем часть предыдущего кода в components/com_k2/templates/default/category.php

Спойлер
[свернуть]
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

vodka_pivo

  • Осваиваюсь на форуме
  • ***
  • 57
  • 5
  • Ёрш
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #10 : 14.12.2011, 16:41:39 »
1. Если в фале components/com_k2/templates/default/category.php закомментирована строка
Код
//$docpagenr = '?start=' . $docstart;
то при переходе по ссылкам 2,3...
Код
<link href="http://site.ru/kategoriya.html" rel="canonical" />
что ВЕРНО!

Если переходить Назад-Вперед то (если 12 материалов на  странице)
Код
<link href="http://site.ru/kategoriya.html?limit=12" rel="canonical" />
а потом еще перейти В начало то
Код
<link href="http://site.ru/kategoriya.html?limit=12&amp;limitstart=0" rel="canonical" />
Если В конец то
Код
<link href="http://site.ru/kategoriya.html?limit=12" rel="canonical" />

2. Если раскомментировать в файле строку то при переходе по 2,3... тег каноникал выставляется правильно,и выглядит так
Код
<link href="http://site.ru/kategoriya.html?start=12" rel="canonical" />
Код
<link href="http://site.ru/kategoriya.html?start=24" rel="canonical" />

если переходить по ссылке Вперед то тег выглядит неправильно
Код
<link href="http://site.ru/kategoriya.html?limit=12?start=12" rel="canonical" />
Код
<link href="http://site.ru/kategoriya.html?limit=12?start=24" rel="canonical" />
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #11 : 14.12.2011, 22:08:19 »
Ох уж эти водка с пивом. Все у них на лимитах висит ;D
Для такого случая должно работать сие
Код
// ------------ Start Canonical-Mod
$document = JFactory::getDocument();
$sef = JFactory::getConfig()->getValue('sef');
$livesite = JFactory::getConfig()->getValue('live_site');

// Постраничная разбивка
$docstart = JRequest::getInt('start',0);
$docpagenr = '';
if($docstart>0 && $sef >0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница категории
$docpagenr = '?start=' . $docstart;
endif;

// Если это подкатегория
if ($this->category->parent >0) :
$docroute = JRoute::_(K2HelperRoute::getCategoryRoute($this->category->id.':'.$this->category->alias));
// Если это основная категория
else :
$k2menulink = JSite::getMenu()->getParams($active->id);
$docroute = JRoute::_($k2menulink->link . '&Itemid=' . $k2menulink->id);
endif;

if($sef>0) :
$docroute = explode('.html', $docroute);
$docroute = $docroute[0] . '.html';
endif;

$document->addHeadLink( $livesite . $docroute . $docpagenr, 'canonical', 'rel', '' );
// ------------ End Canonical-Mod

Пы.Сы. Работает при включенном SEF и добавлении суффикса .html. При отключенном не проверял, да и нет желания извращаться))
А вообще, правильней будет закрывать индексацию всех этих ?limitstart и ?limit в файле robots.txt
« Последнее редактирование: 15.12.2011, 08:34:42 от Skitalec »
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

kiryann

  • Захожу иногда
  • **
  • 19
  • 3
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #12 : 15.01.2012, 02:42:02 »
vodka_pivo
Упростил код для components/com_k2/templates/default/category.php, см. первый пост.
Добавил возможность вставки в каноникал постраничной разбивки, но закомментировал эту строку. Кому нужно раскомментирует. По мне так это вредно))

Пы.Сы. В последних версиях Joomla криво генерятся ссылки "В начало" и на страницу "1", в них прописывается "limitstart=0"
Это косается не только К2.


"Канонизация - это замещение страницы её каноническим аналогом.
Но канонизация должна применяться корректно - только в том случае, когда основной контент страницы действительно имеет место быть на странице, указываемой в качестве канонической."
То есть если на второй странице один контент, а каноническая ссылка указывает на страницу с другим контентом - то по идее это вредно...?
И как Вы считаете имеет ли смысл закрывать от индексации подкатегории в K2, если в главной категории используется вывод материалов из всех подкатегорий?
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #13 : 15.01.2012, 03:42:58 »
Хмм, я не SEOлог.  ;D
Я лишь смотрю на сайт как на книгу или журнал. В этом контексте, для меня важны ориентиры, которые я могу найти на странице оглавлений (карта сайта, sitemap).
Или как дополнение список материалов на странице раздела (книги, журнала, сайта).
Однако, надо учитывать тот факт, что сайт это динамически развивающаяся книга/журнал.
Исходя из этого возникает дилема, как нам поступить со страницами категорий.
Ведь то, что было сегодня на странице 1, завтра уже будет на странице 2, послезавтра на странице 3... т.е. разные страницы с меняющимся содержанием.

Для такого случая я использую два пути. (не факт, что они идеальны)
1. Если в категории выводится просто список материалов, то я отдаю ее в ПС всю, используя в каноникал вставку ?start=, и указываю ПС, что это динамичные (dynamic) страницы.
Таким образом моя категория становится как бы дополнительной картой сайта.
2. Если в категории выводятся анонсы типа, блог, новости... то я не вижу смысла отдавать все страницы такой категории в ПС,
тем более, что на них присутствует часть самих материалов, а это уже как дубль.
Поэтому я отдаю в ПС только первую страницу такой категории, выставив для всех страниц одну ссылку каноникал, и закрыв все следующие страницы от индексации (noindex nofollow), ни также указываю, что страница категории динамичная (dynamic).
Все остальное я указываю в картах сайта для ПС.

Вредно это или нет? Вопрос конечно холиварный, многие лишились слюны, доказывая друг-другу, что лучше.  ^-^
Тут нужно смотреть индивидуально, отдавать ли в ПС все страницы категорий, или ограничиться главной, и отдачей основного материала.
Немаловажно еще учитывать то, что проход робота ПС по страницам категорий, это доп. нагрузка на сервер.

ПыСы. Просьба, не холиварить на эту тему, ато точно закроется ;)
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

kiryann

  • Захожу иногда
  • **
  • 19
  • 3
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #14 : 15.01.2012, 08:00:40 »
Спасибо за развёрнутый ответ.
Поставил на главные категории - noindex follow, а для подкатегорий для всех страниц одну ссылку каноникал, сайт новостной...
Не идеально, зато индивидуально, надеюсь робот заценит  ^-^
Вот только про  "указываю ПС, что это динамичные (dynamic) страницы" не понял, это как?
Подправленным K2 Plugin для Xmap 2.хх - J 1.7, K 2.5 можете поделиться), а то у меня ссылки категория/подкатегория/материал , а Xmap выдаёт component/K2/материал, приходится sh404SEF включать, а он всё таки тяжеловат..
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #15 : 16.01.2012, 16:41:59 »
Вот только про  "указываю ПС, что это динамичные (dynamic) страницы" не понял, это как?
Мета-теги
Цитата: Википедия
Мета тег Document-state
Мета-тег Document-state также имеет значение при индексации страницы в поисковых системах. Тег обладает двумя значениями — Static и Dynamic. Значение «Static» отмечает, что системе нет необходимости индексировать документ в дальнейшем, «Dynamic» позволяет регулярно индексировать Интернет-страницу.
Код
<meta name="document-state" content="Dynamic" />
Т.е. например для материала, который мы в дальнейшем не собираемся больше менять, можно указать
Код
<meta name="document-state" content="Static" />
для страниц категорий, особенно новостных
Код
<meta name="document-state" content="Dynamic" />

За плагин хочу пива без водки. *DRINK* Пиши в личку, проставляйся. Если что, пиво верну ;D
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

Makc

  • Осваиваюсь на форуме
  • ***
  • 55
  • 11
Re: Добавляем rel=”canonical” в шаблоны K2
« Ответ #16 : 18.01.2012, 16:53:59 »
За плагин хочу пива без водки. *DRINK* Пиши в личку, проставляйся. Если что, пиво верну ;D

Поделитесь, пожалуйста, опытом прикручивания K2 Plugin для Xmap 2.хх - J 1.7 дабы избавиться от component/K2 в ссылках на материал в карте. И адресом для получения пива )
Всё, что пишу, проверено или работатет на J 1.7 + К 2.5.4
*

rokka

  • Захожу иногда
  • **
  • 18
  • 0
Для Joomla 1.5 есть решение?
З.Ы.
Врываясь в тему про Xmap и К2, где менять чтоб вместо:

http://***/itemlist/category/4-***.html
http://***/item/15-***.html

Генерировалось:
http://***/Категория.html
http://***/Категория/Материал.html

И реквизиты для пива в студию.
« Последнее редактирование: 24.02.2012, 22:23:29 от rokka »
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
По идеи это решение должно работать и в Joomla 1.5.
Оно скорей от версии К2 зависит.

Цитировать
Врываясь в тему про Xmap и К2, где менять чтоб вместо:

http://***/itemlist/category/4-***.html
http://***/item/15-***.html

Генерировалось:
http://***/Категория.html
http://***/Категория/Материал.html
Для этого используется сторонний компонент SEF с дополнительным гемороем.
Xmap с плагином этого не делают.

Реквизиты в подписи  ;)
« Последнее редактирование: 24.02.2012, 22:33:05 от AmdAveO »
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

rokka

  • Захожу иногда
  • **
  • 18
  • 0
У меня ругается на сточку
public $live_site = 'http://МОЙСАЙТ.РФ'
з.ы. ответь пожалуйста на пост в другой твоей теме.
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
В J1.5
Код
	var $live_site = 'http://МОЙСАЙТ.РФ';
вместо
Код
	public $live_site = 'http://МОЙСАЙТ.РФ';
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

rokka

  • Захожу иногда
  • **
  • 18
  • 0
Fatal error: Cannot redeclare JConfig::$live_site in /home/r/rokka/abris.webtm.ru/public_html/configuration.php on line 21
*

rokka

  • Захожу иногда
  • **
  • 18
  • 0
Сор, протурил дериктива $live_site уже была в configuration.php а я еще раз добавил.
*

NathanD

  • Осваиваюсь на форуме
  • ***
  • 89
  • 5
А не подскажите как избавится от дублей которые создаёт модуль gk4 news который крутится на разных страницах?
к примеру настоящая ссылка на статью имеет вид: "site.ru/menyu/biblioteka/item/1456-blah-blah"
но если перейти в любой раздел ссылка из этого модуля на эту статью превращается в "site.ru/menyu/novosti/item/1456-blah-blah" или в другую в зависимости от раздела из которого на этот материал переходишь
« Последнее редактирование: 01.03.2012, 22:06:11 от NathanD »
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
NathanD
Читай первый пост.

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

Если же дубли созданны сознательно, например одинаковый материал расположен в нескольких разделах/категориях, то тут поможет robots.txt
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

NathanD

  • Осваиваюсь на форуме
  • ***
  • 89
  • 5
NathanD
Читай первый пост.

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

проблема в том что у меня в коде страницы в первом случае отображается:
<link rel="canonical" href="http://site.ru/menyu/biblioteka/item/1443-blah-blah">
а во втором
<link rel="canonical" href="http://site.ru/menyu/novosti/item/1443-blah-blah">
что совсем неправильно т.к. материал один и тот же, может я что то не так делаю? на всякий случай добавил код и в стандартный шаблон k2 и в свой - всёравно такая же картина.

з.ы. а при переходе с  главной вообще выглядит так:
<link rel="canonical" href="http://site.ru/component/k2/item/1443-blah-blah">
« Последнее редактирование: 02.03.2012, 02:47:58 от NathanD »
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
При правильной структуре и добавлении материала только в один раздел такого не должно быть.
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

NathanD

  • Осваиваюсь на форуме
  • ***
  • 89
  • 5
может проблема в том что раздел где находится именно этот материал напрямую из меню недоступен? меню ссылается на весь раздел, а в нём уже различные подразделы с меню не связанные, я собственно так думаю потому что линки на материалы расположенные в разделах куда ведёт меню - отображаются как надо, интересно, это как то можно вылечить? т.к. добавлять эти подразделы в меню слишком ветвисто получается, да и названия не уместишь т.к. длинные
p.s. есть же ещё не упомянутые в первом посте файлы: category_item.php, category_item_links.php может в них дело?
« Последнее редактирование: 02.03.2012, 03:20:12 от NathanD »
*

AmdAveO

  • Осваиваюсь на форуме
  • ***
  • 167
  • 40
Нет, в твоем случае за это отвечает файл шаблона материала - components/com_k2/templates/default/item.php
Ты неверно создал структуру.
Для нормальной работы нужно в меню создать копию структуры разделов К2 с привязкой категорий.
Т.е.
Категории К2
Главная категория
-Подкатегория1
--Подподкатегория1
-Подкатегория2
...

Меню для категории К2
Главная категория (привязка Главная категория К2) 
-Подкатегория1 (привязка Подкатегория1 К2)
--Подподкатегория1 (привязка Подподкатегория1 К2)
-Подкатегория2 (привязка Подкатегория2 К2)
...
Просить не буду! Сами дадите, когда совесть замучает. R336340187313
*

NathanD

  • Осваиваюсь на форуме
  • ***
  • 89
  • 5
кстати заметил что после редактирования tag.php перестают работать теги, точнее работают только теги из одного слова, а где больше - выводит 404, без кода всё работает, это моя локальная проблема?