Блог Игоря Тимошенко

Previous Entry Add to Memories Share Next Entry
Добавляем мета-тег canonical в DataLife Egnine (DLE)
[info]timoshenko
Здравствуйте,

в предыдущей своей заметке я рассказал Вам о проблемах дублирования контента в DataLife Engine, в частности о том, когда новости доступны сразу по нескольким адресам и об этом знают поисковые системы. Там же я предложил Вам один из способов решения проблемы - 301 редирект на PHP.

Сегодня, я предлагаю Вам второй способ решения проблемы дублирования контента в DataLife Engine (DLE) - использование мета-тега canonical.

В феврале 2009 года, Google, Yahoo! и Microsoft заявили о поддержке ими нового мета-тега - canonical, который предотвращает появление дублей новостей в поисковых системах. Размещается он, как и все мета-теги внути контейнера <head>...</head> и выглядит следующим образом: <link rel="canonical" href="http://www.example.com" />. В секции href указывается адрес новости, который будет учитываться поисковыми системами.

Перейдем к практической части. Как добавить мета-тег canonical в DataLife Engine (DLE)? Очень просто.

Откройте файл /index.php и найдите строку

if ($dle_module == 'showfull') {

добавьте ниже

    $metatags .= <<<HTML

<link rel="canonical" href="{$full_link}" />
HTML;

Теперь в исходном коде полной новости будет присутствовать мета-тег canonical, что нам и было нужно. Если поисковая система узнает о каком-то другом адресе новости, то все равно будет учитывать только тот адрес, который указан в мета-теге canonical. Хочу также отметить, что поисковая система Яндекс не учитывает этот мета-тег, поэтому использовать его или 301 редирект решать Вам.

На этом пока все. Желаю Вам успешной борьбы с дублированием контента!

А можно сразу 2 способа задействовать? Не будет ли конфликта международного?

Я думаю, не стоит, т.к. в этом нет особого смысла. Я пользуюсь редиректом, если интересно.

Да. Я тоже выбрал первый способ. Огромное спасибо. Жду от Вас еще полезных советов по DLE.

А как добавить еще для категорий?

Это для новостей, позже будет для категорий, если нужно.

А спасёт ли этот способ от такого дубля:
site.ru/pesnya.html#comment ?

И расскажите подробнее, куда вставлять данный код, а то я не понял :(

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

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

Да, действительно устанавливать легко. Просто я пытался найти всю строку приведённую вами, а у меня вместо одинарных кавычек стоят двойные. Потому и не нашёл в первый раз.

$getcat = get_url ( $category_id );
$hosturl = $_SERVER['REQUEST_URI'];


$page_n ='page/'.$npage.'/';

if ($hosturl != '/'.$getcat .'/' ) {

if ( $category == $news_found ) {
$metatags .= "\n";

}
}

Сеня накидал как смог по своим знаниям.. но у всех страниц page/1/ /2/ /3/ .... теперь метатегах ссылка на на урл до категории. как подставить page с стр., понятия не имею.. Это только написал кое как.

Я пробовал писать данный хак под категории, но там возник один нюанс в виде кеширования, поэтому не стал публиковать, суть в том, что short.story.php кешируется при включенном кешировании, поэтому редирект (писал сначала редирект, для мета-тега canonical нужно минимум правок) срабатывает только раз, потом сколько угодно можно запрашивать категорию под липовым адресом.

Опубликуете один из вариантов?

Его есть смысл использовать, если на сайте не включено кеширование.

Спасибо я сделал с учетом page страниц. Очень рад (3 строчки кода а надуше так легко стало)) ведь не разу даже не пытался что либо написать. Угоробил кучу времени, почти сутки на вычитание документаций всяких логических операторов, Супер глобальный массивов. Всеобщем я знать не знал что столько всего существует. Теперь подумываю мож попробовать изучение этого языка...
мне этот хак 3 раза писали. И все время вылезали косяки, то page не учитывается, то в в подкатах не появлялся. То в категории в которой не должен появиться (причем условие стоит) а он есть..
Хотел выложить у вас, но ЖЖ режит, так что если что, Я по просьбе обязательно выложу.

Да, вы оказались правы с кешированием.
А что делать? как все таки сверить урл если включено кеширование.
У Вас нет мыслей.?

Отключить кеширование.

Может есть способ чтоб все кешировалось кроме нужного?
или
я правильно понимаю : записывается в кеш и потом из файла без запросов отдает.
может сделать проверку кеша и если он хоть немного изменен в то не кешировать. Я не программист, поэтому возможно вы меня не поймете. Т.к. я могу нести бред)

Можно сделать проще, в файле robots.txt запретить к индексации категории на сайте, т.к. это, кстати, тоже дублирование контента и разрешить лишь полные новости к индексации. Идея немного из оперы ереси, но тоже вариант :) Подумаю, что можно сделать, но пока ничего не обещаю. Возможно, что в новой версии движка все это уже будет реализовано, т.к. на официальном сайте уже стоит проверка адреса полной новости. Наверное, Целсофт понял, что есть недоработка :)

Наврятли он реализует сверку категорий. Тем более при условии кеша.
Ну по поводу запрета индексации это зло.
У меня в коротких новостях уникальный текст и на основе хака который я доделал происходит редирект (отказался от каноникал в пользу Яндеска)
Причем с учетом страниц PAGE (если конечно эта страница действительно page/2/,/3/,/4/, а не page/2/rrtrмусорetret или 4545мусор4545/page/2/
+ Я учел $category чтоб не было редиректа с domen.ru/laptop/ на domen.ru/main/laptop/ НО у страниц page при таком условии Редирект срабатывает. Все как и задумано было.

+(т.к. я надеюсь в скором времени реализовать хак который будет добавлять к страницам page/2/,/3/,/4/.... уникальный TITLE.
+ если не учитывать page то будет редирект на категорию. А это конечно глупо, ведь как пользователь не сможет использовать навигацию по страницам ))). Вообщем все отлично, но отказываться от кеширования для меня это самоубийство. И теперь выбор 2-х зол, либо кеширование, либо правильные урлы.


Да на оф. сайте DLE новостей, действительно сверка урла происходит, и срабатывает редирект.

Для страниц вида /page/*/* в версии движка 9.2 добавлены уникальные тайтлы ;)

Кода? Где? Серьездно?
По моему там говорилось о панигаторе который генерил page/1/
если мы на page/2/ то панигатор делал ссылку page/1/ .Это вылечили.

Если это действительно так, то я пойду качать на оф сайт.
Скажи это еще раз), мне не верится.

И для главной страницы, и для категорий добавили в 9.2.

для категорий добавили, это я знаю.

Так страница page/1/ это либо сам домен, или кат, или подкат. - Поэтому отметаем.
НО
page/2/, page/3/, page/4/ общий TITLE который берется у домена, либо у ката если указана, или у подката если он заполнен.

Я я хочу сделать чтоб для для страниц page/2/, page/3/, page/4/ был свой тайтл, который брался из файла, + с учетом категории, о как :)


Не давно у хорошего человека купил модуль линкатор, так в чем суть
там реализована замена ссылок даже с условием кеша.
Как он это сделал фик знает, модуль зазенден, Но если капать в эту сторону то canonical возможно осуществить я думаю, (добавить в кеш метатег если урл не правильный) но с редиректом не понимаю.. помоему нельзя ведь header("HTTP/1.1 301 Moved Permanently"); понимает на уровне сервера (php)/ Короче тут я затупил(в сомнении), т.к. в этом очень плохо смыслю.
Поправьте меня, если я не прав, т.к. знать лучше чем догадываться))


597 стр. engine/engine.php
$tpl->result['content'] .= $active;
сказали вот с этим работать :)
это импорт из кэша.
а как сделать? черт знает. ))

Сделал canonical с кэшем.
Есть нюанс, как исключить длешную 404 ?
как названна переменная 404 у дле.?
ведь под условие if ($dle_module=='cat') попадает. И не исключает там.(
Скажите кто знает...

Сделал редирект с кэшем.
не могу решить ньанс с 404 ((
капец какой то..

Все готово) всем спасибо. xD

Пожалуйста :)

You are viewing [info]timoshenko's journal