Jump to content

Добавление ссылки канонических URL


Recommended Posts

И так выводить канонические УРЛы мы будем в категориях товаров и в карточках товаров.
Начнем с категорий товаров.

Для начала в базе данных, в таблице s_products создадим поле meta_canonical



Затем открываем файл api/Categories.php
примерно на 186 строке добавляем в запрос

,c.meta_canonical




Открываем файл view/ProductsView.php
Примерно на 200 строчке добавляем


$this->design->assign('meta_canonical', $category->meta_canonical);

что бы получилось


Теперь переходим к файлу simpla/CategoryAdmin.php
примерно на 26 строчке добавляем

$category->meta_canonical = $this->request->post('meta_canonical');




И самое интересное открываем файл simpla/design/html/category.tpl

Примерно на 184 строчке перед тегом

</ul>

добавляем

<li><label class=property style="color: {if $category->meta_canonical}red{else}green{/if};">Канонический URL</label><input name="meta_canonical" class="simpla_inp" type="text" value="{$category->meta_canonical}" /></li>


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





Идем в наш дизайн основной части страницы
design/ТЕМА/html/index.tpl

и где-нибудь в HEAD рядом с выводом метатегов вставляем:
 

{if $meta_canonical}
<link rel="canonical" href="{$meta_canonical|escape}"/>
{/if}


Переходим к карточкам товаров:
Открываем api/Products.php

примерно 115-120 строки, там в запрос добавляем:


p.meta_canonical,


в 260 строках тоже есть запрос, туда тоже добавляем

p.meta_canonical,




Затем открываем view/ProductView.php
примерно на 225 строке вставляем


$this->design->assign('meta_canonical', $product->meta_canonical);




Открываем simpla/ProductAdmin.php
32 строка примерно добавляем



$product->meta_canonical = $this->request->post('meta_canonical');




открываем simpla/design/html/product.tpl

Примерно в 500 строках находим


<!-- Параметры страницы -->
<div class="block layer">
<h2>Параметры страницы</h2>
<ul>



добавляем

 

<li><label class=property style="color: {if $product->meta_canonical}red{else}green{/if};">Канонический URL</label><input name="meta_canonical" class="simpla_inp" type="text" value="{$product->meta_canonical}" /></li>
 

 






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

Link to post
Share on other sites
  • 3 weeks later...
  • 3 months later...

Rash, незнаю в чём дело было, может кэш не почистил, но всё заработало, а теперь самое вкусное, заполним все канонические юрл автоматом, нужно сделать 2 запроса:

UPDATE `s_categories` SET `meta_canonical`= CONCAT('http://example.com/catalog/',s_categories.url)
UPDATE `s_products` SET `meta_canonical`= CONCAT('http://example.com/products/',s_products.url)
Link to post
Share on other sites
  • 5 months later...

ДОПОЛНЕНИЕ

 

1. в файле simpla/CategoryAdmin.php после:

// Не допустить одинаковые URL разделов.            
if(($c = $this->categories->get_category($category->url)) && $c->id!=$category->id)
            {
                $this->design->assign('message_error', 'url_exists');
            }

добавляем

// Не допустить одинаковые канонические URL разделов.
elseif(($c = $this->categories->get_category($category->meta_canonical)) && $c->id!=$category->id)
   {
     $this->design->assign('message_error', 'meta_canonical_exists');
   }

2.  в файле simpla/ProductAdmin.php после:

// Не допустить одинаковые URL разделов.            
elseif(($p = $this->products->get_product($product->url)) && $p->id!=$product->id)
            {
                $this->design->assign('message_error', 'url_exists');
                if(!empty($product->id))
                    $images = $this->products->get_images(array('product_id'=>$product->id));
            }

добавляем

// Не допустить одинаковые канонические URL разделов.            
elseif(($p = $this->products->get_product($product->meta_canonical)) && $p->id!=$product->id)
            {
                $this->design->assign('message_error', 'meta_canonical_exists');
                if(!empty($product->id))
                    $images = $this->products->get_images(array('product_id'=>$product->id));
            }

3. в файле simpla/design/html/category.tpl после:

url_touched = true;

добавляем

meta_canonical_touched = true;

после

if($('input[name="url"]').val() == generate_url() || $('input[name="url"]').val() == '')
        url_touched = false;

добавляем

if($('input[name="meta_canonical"]').val() == generate_meta_canonical() || $('input[name="meta_canonical"]').val() == '')        
meta_canonical_touched = false;

после

$('input[name="url"]').change(function() { url_touched = true; });

добавляем

$('input[name="meta_canonical"]').change(function() { meta_canonical_touched = true; });

после

function generate_url(){
    url = $('input[name="name"]').val();
    url = url.replace(/[\s]+/gi, '-');
    url = translit(url);
    url = url.replace(/[^0-9a-z_-]+/gi, '').toLowerCase();
    return url;
}

добавляем

function generate_meta_canonical(){
    url = $('input[name="name"]').val();
    url = url.replace(/[\s]+/gi, '-');
    url = translit(url);
    url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
    return url;
}

ниже заменить

<span>{if $message_error=='url_exists'}Категория с таким адресом уже существует{else}{$message_error}{/if}</span>

на

<span>{if $message_error=='url_exists'}Категория с таким адресом уже существует{elseif $message_error=='meta_canonical_exists'}Категория с таким каноническим адресом уже существует{else}{$message_error}{/if}</span>

ниже заменить

<li><label class=property style="color: {if $product->meta_canonical}red{else}green{/if};">Канонический URL</label><input name="meta_canonical" class="simpla_inp" type="text" value="{$product->meta_canonical}" /></li>

на

<li><label class=property style="color: {if $category->meta_canonical}green{else}red{/if};">Канонический адрес</label><div class="page_url">/catalog/</div><input name="meta_canonical" class="page_url" type="text" value="{$category->meta_canonical}" /></li>

4. выше указанные действия пункта "3" произвести в файле product.tpl

5. в базе произвести запросы:

UPDATE `s_categories` SET `meta_canonical`= CONCAT(s_categories.url)

и

UPDATE `s_products` SET `meta_canonical`= CONCAT(s_products.url)

6. в файле design/ВАША ТЕМА/html/index.tpl заменить:

{if $meta_canonical}
<link rel="canonical" href="{$meta_canonical|escape}"/>
{/if}

на

{if $meta_canonical}  
{if $product}
<link rel="canonical" href="{$config->root_url}/products/{$product->meta_canonical}"/>
{elseif $category}
<link rel="canonical" href="{$config->root_url}/catalog/{$category->meta_canonical}"/>   
{/if}
{/if}

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

 

Link to post
Share on other sites
  • 4 months later...

Подскажите пож. А то никак не могу понять. Зачем канонические страницы в карточках товаров? С категориями все понятно. Мега нужная вещь. А вот в карточке зачем?

Link to post
Share on other sites

В яндекс.php есть. Не спорю. Это сделано для того, чтобы скажем выбрали в яндекс маркете курточку с размером "М" нажал купить - и сразу перешли на сайт на симпле и там уже был выбрал вариант "М". Это в идеале - а на самом деле так оно не работает. По крайней мере я ни разу не видел, чтобы оно на симпле работало. Послему  яндекс.php это бесполезная вещь.

 

А вот зачем canonical в карточке товаров - ну никак не пойму. Там нет листалки страниц, нет вариантов всяких. Только лишний запрос к БД и лишняя нагрузка по моему.

Link to post
Share on other sites

А как быть с каноническими URL, если я нахожусь в категории товара и выбираю определенный бренд этого товара.

URL страниц разные, содержимое страниц разное, а канонические URL указывают что это одна и страница.

Link to post
Share on other sites

После танцев с бубном все получилось!!!

 

Нашел еще проблему что если действовать по дополнению Danya на шаге:

4. выше указанные действия пункта "3" произвести в файле product.tpl

Нельзя вышеуказанные действия производить в файле product.tpl, иначе авто-заполнение канонических url в продуктах производится не будет и симпла будет плеваться ошибками при сохранении товара, надо производить указанные действия по аналогии пункта "3" в процессе category заменять на product в кодах.

Link to post
Share on other sites

После танцев с бубном все получилось!!!

 

Нашел еще проблему что если действовать по дополнению Danya на шаге:

4. выше указанные действия пункта "3" произвести в файле product.tpl

Нельзя вышеуказанные действия производить в файле product.tpl, иначе авто-заполнение канонических url в продуктах производится не будет и симпла будет плеваться ошибками при сохранении товара, надо производить указанные действия по аналогии пункта "3" в процессе category заменять на product в кодах.

не придумывайте велосипед:

 

http://forum.simplacms.ru/topic/5108-добавление-ссылки-канонических-url-в-шаблоне/

Link to post
Share on other sites
Reni

 

Если всё делалось по инструкции, то ни какими ошибками плеваться не будет!

Лично проверялось несколько раз и по сей день работает на рабочих магазинах!

Link to post
Share on other sites

Дождался индексации в яндексе, получил 3380 исключенных страниц по причине:

Документ является неканоническим В коде документа в тэге <link> содержится параметр rel="canonical", содержащий канонический адрес страницы, по которому она индексируется роботом. Как правило, тег <link> с атрибутом rel="canonical" прописывают на дублирующих страницах сайта, в этом случае ничего исправлять не требуется. Если страницы дублями не являются и должны индексироваться роботом, то вам необходимо убрать атрибут из их исходного кода. Более подробную информацию об использовании rel="canonical" вы можете прочитать на следующей странице нашей Помощи
Link to post
Share on other sites
  • 2 weeks later...

Канонические ссылки появятся в версии 2.3.1, посмотреть можно тут: http://beta.simplacms.ru

На главной странице http://beta.simplacms.ru   указана    

 

<link rel="canonical" href="http://beta.simplacms.ru"/>
 

хотя по правилам rel="canonical" указывается только на неканонических версиях всех страниц HTML

в противном случае страница может выпасть из индекса.

https://support.google.com/webmasters/answer/139394?hl=ru

Link to post
Share on other sites

 

На главной странице http://beta.simplacms.ru   указана    

 

<link rel="canonical" href="http://beta.simplacms.ru"/>
 
хотя по правилам rel="canonical" указывается только на неканонических версиях всех страниц HTML. [/size]

в противном случае страница может выпасть из индекса.[/size]

https://support.google.com/webmasters/answer/139394?hl=ru[/size]

 

По вашей ссылке об этом ничего не сказано. Более того, на самой же странице указано 

<link href="https://support.google.com/webmasters/answer/139394?hl=ru" rel="canonical">
Link to post
Share on other sites

 

 

По вашей ссылке об этом ничего не сказано. Более того, на самой же странице указано 

<link href="https://support.google.com/webmasters/answer/139394?hl=ru" rel="canonical">

Сори, вы правы.

Нашел выдержку Яндекса, что для нас более актуально:

 

Также если на странице расположен атрибут rel="canonical", с указанием непосредственного адреса этой страницы, робот посчитает ее канонической. Данная страница будет индексироваться и появится в поисковой выдаче Яндекса.
 
Робот считает ссылку с атрибутом rel="canonical" не строгой директивой, а предлагаемым вариантом, который учитывается, но может быть проигнорирован.

 

Link to post
Share on other sites

можете проще сказать, это решение улучшает выдачу или наоборот её нарушает?

Можно сказать только одно - польза от этого решения есть.

Пример:

категория "мобильные телефоны", у это категории может быть множество страниц (в зависимости от кол-ва товара и т.д.) .

Получается что вес данной страницы (категории) распределяется по всем страницам мобильные-телефоны/page-1,  мобильные-телефоны/page-2, ......... и т.д.

Чтобы весь вес категории оставался на данной категории и необходимо указывать адрес канонической страницы.

Link to post
Share on other sites
  • 5 months later...

Эта тема еще жива? Если да, то вопрос к автору или другим пользователям :) Как сделать чтобы каноническая страница не ссылалась сама на себя, т.к. это не есть хорошо? Например, страница, допустим "Мобильные телефоны" имеет вид: название_сайта/catalog/mobilnye-telefony. Каноническая ссылка на этой странице такая же. Как сделать, чтобы не выводилась каноническая ссылка? И другой вопрос: когда на странице "Мобильные телефоны" выбираешь бренд какой-либо, каноническая ссылка не меняется. Т.е. адрес страницы такой: название_сайта/catalog/mobilnye-telefony/sony, а каноническая такая: название_сайта/catalog/mobilnye-telefony. Надо, чтобы в ссылку добавлялось название бренда. Опять же, как реализовать?) За ранее спасибо.

Link to post
Share on other sites

2.  когда на странице "Мобильные телефоны" выбираешь бренд какой-либо, каноническая ссылка не меняется. Т.е. адрес страницы такой: название_сайта/catalog/mobilnye-telefony/sony, а каноническая такая: название_сайта/catalog/mobilnye-telefony.

 

Видимо, у Вас  свои доработки, потому как на демо-сайте совсем не так...

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...