JustDavali Posted December 17, 2012 Report Share Posted December 17, 2012 И так выводить канонические УРЛы мы будем в категориях товаров и в карточках товаров.Начнем с категорий товаров.Для начала в базе данных, в таблице 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.php32 строка примерно добавляем $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" Quote Link to post Share on other sites
n1c Posted January 3, 2013 Report Share Posted January 3, 2013 все гуд получилось спасибо JustDavaliв базу помимо s_products нужно тоже самое сделать и в s_categories! Quote Link to post Share on other sites
Romalibert Posted April 7, 2013 Report Share Posted April 7, 2013 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) Quote Link to post Share on other sites
Rash Posted April 7, 2013 Report Share Posted April 7, 2013 Romalibert, спасибо очень удобно! Пригодится и для остальных Quote Link to post Share on other sites
Danya Posted September 27, 2013 Report Share Posted September 27, 2013 ДОПОЛНЕНИЕ 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.tpl5. в базе произвести запросы: 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} Теперь при вводе названия категории или товара, автоматически прописывается канонический адрес с проверкой на существование совпадающего адреса. Quote Link to post Share on other sites
SV911 Posted February 9, 2014 Report Share Posted February 9, 2014 Подскажите пож. А то никак не могу понять. Зачем канонические страницы в карточках товаров? С категориями все понятно. Мега нужная вещь. А вот в карточке зачем? Quote Link to post Share on other sites
SV911 Posted February 9, 2014 Report Share Posted February 9, 2014 В яндекс.php есть. Не спорю. Это сделано для того, чтобы скажем выбрали в яндекс маркете курточку с размером "М" нажал купить - и сразу перешли на сайт на симпле и там уже был выбрал вариант "М". Это в идеале - а на самом деле так оно не работает. По крайней мере я ни разу не видел, чтобы оно на симпле работало. Послему яндекс.php это бесполезная вещь. А вот зачем canonical в карточке товаров - ну никак не пойму. Там нет листалки страниц, нет вариантов всяких. Только лишний запрос к БД и лишняя нагрузка по моему. Quote Link to post Share on other sites
FDA Posted February 12, 2014 Report Share Posted February 12, 2014 А как быть с каноническими URL, если я нахожусь в категории товара и выбираю определенный бренд этого товара.URL страниц разные, содержимое страниц разное, а канонические URL указывают что это одна и страница. Quote Link to post Share on other sites
Reni Posted February 18, 2014 Report Share Posted February 18, 2014 На свой страх и риск я потерял все категории Quote Link to post Share on other sites
Reni Posted February 19, 2014 Report Share Posted February 19, 2014 После танцев с бубном все получилось!!! Нашел еще проблему что если действовать по дополнению Danya на шаге:4. выше указанные действия пункта "3" произвести в файле product.tplНельзя вышеуказанные действия производить в файле product.tpl, иначе авто-заполнение канонических url в продуктах производится не будет и симпла будет плеваться ошибками при сохранении товара, надо производить указанные действия по аналогии пункта "3" в процессе category заменять на product в кодах. Quote Link to post Share on other sites
Dr_Brown Posted February 20, 2014 Report Share Posted February 20, 2014 После танцев с бубном все получилось!!! Нашел еще проблему что если действовать по дополнению Danya на шаге:4. выше указанные действия пункта "3" произвести в файле product.tplНельзя вышеуказанные действия производить в файле product.tpl, иначе авто-заполнение канонических url в продуктах производится не будет и симпла будет плеваться ошибками при сохранении товара, надо производить указанные действия по аналогии пункта "3" в процессе category заменять на product в кодах.не придумывайте велосипед: http://forum.simplacms.ru/topic/5108-добавление-ссылки-канонических-url-в-шаблоне/ Quote Link to post Share on other sites
Danya Posted February 21, 2014 Report Share Posted February 21, 2014 Reni Если всё делалось по инструкции, то ни какими ошибками плеваться не будет!Лично проверялось несколько раз и по сей день работает на рабочих магазинах! Quote Link to post Share on other sites
Reni Posted February 27, 2014 Report Share Posted February 27, 2014 Дождался индексации в яндексе, получил 3380 исключенных страниц по причине: Документ является неканоническим В коде документа в тэге <link> содержится параметр rel="canonical", содержащий канонический адрес страницы, по которому она индексируется роботом. Как правило, тег <link> с атрибутом rel="canonical" прописывают на дублирующих страницах сайта, в этом случае ничего исправлять не требуется. Если страницы дублями не являются и должны индексироваться роботом, то вам необходимо убрать атрибут из их исходного кода. Более подробную информацию об использовании rel="canonical" вы можете прочитать на следующей странице нашей Помощи. Quote Link to post Share on other sites
Danya Posted February 28, 2014 Report Share Posted February 28, 2014 скинь XLS файлик с исключенными ссылками Quote Link to post Share on other sites
shurikello Posted February 28, 2014 Report Share Posted February 28, 2014 подтверждаю по поводу отсутствия автозаполнения кан. урл по инструкции от Danyaчто сделать, чтобы заработало? Quote Link to post Share on other sites
Danya Posted February 28, 2014 Report Share Posted February 28, 2014 скиньте доступ к ftp, помогу настроить! Quote Link to post Share on other sites
Reni Posted March 4, 2014 Report Share Posted March 4, 2014 скинь XLS файлик с исключенными ссылкамиНаписал Вам в лс Quote Link to post Share on other sites
pikusov Posted March 15, 2014 Report Share Posted March 15, 2014 Канонические ссылки появятся в версии 2.3.1, посмотреть можно тут: http://beta.simplacms.ru Quote Link to post Share on other sites
FDA Posted March 15, 2014 Report Share Posted March 15, 2014 Канонические ссылки появятся в версии 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 Quote Link to post Share on other sites
pikusov Posted March 16, 2014 Report Share Posted March 16, 2014 На главной странице 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"> Quote Link to post Share on other sites
FDA Posted March 16, 2014 Report Share Posted March 16, 2014 По вашей ссылке об этом ничего не сказано. Более того, на самой же странице указано <link href="https://support.google.com/webmasters/answer/139394?hl=ru" rel="canonical"> Сори, вы правы.Нашел выдержку Яндекса, что для нас более актуально: Также если на странице расположен атрибут rel="canonical", с указанием непосредственного адреса этой страницы, робот посчитает ее канонической. Данная страница будет индексироваться и появится в поисковой выдаче Яндекса. Робот считает ссылку с атрибутом rel="canonical" не строгой директивой, а предлагаемым вариантом, который учитывается, но может быть проигнорирован. Quote Link to post Share on other sites
chubr Posted March 16, 2014 Report Share Posted March 16, 2014 можете проще сказать, это решение улучшает выдачу или наоборот её нарушает? Quote Link to post Share on other sites
FDA Posted March 16, 2014 Report Share Posted March 16, 2014 можете проще сказать, это решение улучшает выдачу или наоборот её нарушает?Можно сказать только одно - польза от этого решения есть.Пример:категория "мобильные телефоны", у это категории может быть множество страниц (в зависимости от кол-ва товара и т.д.) .Получается что вес данной страницы (категории) распределяется по всем страницам мобильные-телефоны/page-1, мобильные-телефоны/page-2, ......... и т.д.Чтобы весь вес категории оставался на данной категории и необходимо указывать адрес канонической страницы. Quote Link to post Share on other sites
megamutex Posted September 8, 2014 Report Share Posted September 8, 2014 Эта тема еще жива? Если да, то вопрос к автору или другим пользователям Как сделать чтобы каноническая страница не ссылалась сама на себя, т.к. это не есть хорошо? Например, страница, допустим "Мобильные телефоны" имеет вид: название_сайта/catalog/mobilnye-telefony. Каноническая ссылка на этой странице такая же. Как сделать, чтобы не выводилась каноническая ссылка? И другой вопрос: когда на странице "Мобильные телефоны" выбираешь бренд какой-либо, каноническая ссылка не меняется. Т.е. адрес страницы такой: название_сайта/catalog/mobilnye-telefony/sony, а каноническая такая: название_сайта/catalog/mobilnye-telefony. Надо, чтобы в ссылку добавлялось название бренда. Опять же, как реализовать?) За ранее спасибо. Quote Link to post Share on other sites
Kors Posted September 8, 2014 Report Share Posted September 8, 2014 2. когда на странице "Мобильные телефоны" выбираешь бренд какой-либо, каноническая ссылка не меняется. Т.е. адрес страницы такой: название_сайта/catalog/mobilnye-telefony/sony, а каноническая такая: название_сайта/catalog/mobilnye-telefony. Видимо, у Вас свои доработки, потому как на демо-сайте совсем не так... Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.