Перейти к содержанию
Официальный форум поддержки Simpla

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


Рекомендуемые сообщения

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

Для начала в базе данных, в таблице 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"

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...
  • 3 месяца спустя...

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)
Ссылка на сообщение
Поделиться на другие сайты
  • 5 месяцев спустя...

ДОПОЛНЕНИЕ

 

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}

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

 

Ссылка на сообщение
Поделиться на другие сайты
  • 4 месяца спустя...

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
Reni

 

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

Канонические ссылки появятся в версии 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

Ссылка на сообщение
Поделиться на другие сайты

 

На главной странице 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 href="https://support.google.com/webmasters/answer/139394?hl=ru" rel="canonical">

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

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

 

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

 

Ссылка на сообщение
Поделиться на другие сайты

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

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

Пример:

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 5 месяцев спустя...

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...