В 14 версии 1С-Битрикс появились новые возможности SEO, благодаря которым, можно создавать шаблоны для мета-тегов (подробнее здесь).
Одной из возможностей является отображение в мета-тегах цены товара. Все работает просто замечательно, за исключением одного нюанса. Если в настройках компонента каталога стоит настройка “Показывать цены в одной валюте”, то в мета-тегах цены все равно будут выводиться в той валюте, в которой они хранятся в каталоге. Т.е. фактически цена на странице товара будет отличаться от цены в мета-тегах, что может плохо отразиться на СЕО продвижении сайта.
По мнению СЕО специалистов возможны 3 варианта:
не выводить цены в мета-тегах вообще;
в шаблоне карточки товара нужно вывести дополнительно цену в валюте, которая будет соответствовать цене в мета-тегах;
цены в мета-тегах и странице должны полностью совпадать
Мне при разработке интернет-магазина необходим был именно 3 вариант.
Сделаем дорабтку.
Нам необходимо сделать 3 вещи:
Написать свой шаблон во вкладке SEO для вывода нашей цены. Например {component.price}
Доработать шаблон компонента catalog.element
Шаблон для цены в мета-тегах
Шаблон можно задавать в 3-х местах: настройках инфоблока, редактировании раздела инфоблока и редактировании самого элемента. У всех троих есть вкладка SEO, где это все и настраивается. Я задал шаблон для всего инфоблока.
Для нашей цены я указал шаблон {component.price} как писал выше. Далее перейдем к доработке шаблона компонента.
Доработка шаблона компонента catalog.element
В файл result_modifier.php просто добавляем код:
foreach($arResult["IPROPERTY_VALUES"] as $key => $value)
$arResult["IPROPERTY_VALUES"][$key] = str_replace("{component.price}", $arResult["PRICES"]["BASE"]["PRINT_VALUE"], $arResult["IPROPERTY_VALUES"][$key]);
В результате строка {component.price} заменяется на необходимую цену из карточки товара.
З.Ы.
Если нужно более гибкое формирование мета-тегов, можете почитать об этом здесь.
С 17 версии пример не работает? Модификация result_modifier.php меняет код в теле страницы, но в метатегах замены не происходит. Если использовать component_epilog.php, то ситуация аналогичная.
Как то раз мне поступила задача из отдела маркетинга "сделать так, что бы при добавлении новостей в соцсети автоматически подгружалось необходимое изображение, заголовок и описание. Что бы не приходилось каждый раз выбирать картинку вручную". Для опытных профи это конечно простенькая задача, но для меня на тот момент это была головоломка.
Для решения такой задачи существует og протокол. Про особенности его работы в каждой отдельной соцсети писать не буду, эту инфу можно погуглить. Суть в том, что нам необходимо добавить в тег <head></head> дополнительные мета-теги, которые будут указывать соцсетям какую именно картинку, заголовок и описание цеплять для показа.
Для выполнения задачи нам нужны следующие мета-теги:
<met a property="og:title" content="Заголовок новости" />
<met a property="og:description" content="Текст анонса" />
<met a property="og:image" content="Путь к изображению анонса" />
Решение
В качестве примера возьмем шаблон компонента news.detail. В папку шаблона (к примеру .default) добавляем файл result_modifier.php со следующим кодом:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
//Кэшируем необходимые нам ключи $arResult что бы можно было их использовать в component_epilog.php
$this->__component->SetResultCacheKeys(array(
"NAME",
"PREVIEW_TEXT",
"PREVIEW_PICTURE"
));?>
далее создаем в этой же папке файл component_epilog.php с кодом
В данном примере для картинки анонса необходимо дополнительно указать поле:
Что бы мета-теги появились в исходном коде, в шаблоне сайта должна присутствовать функция $APPLICATION->ShowHeadStrings()
Результат:
UDP.
Просьба исправлять тег <meta> сомостоятельно, так как редактор отрывает букву "a" и получается <met a>. Иначе можете потерять массу времени при копировании кода из данного поста.
AddHeadString - конечно не плохое решение и довольно простое. Но мне кажется использование отложенных функций более гибко. Это позволит избежать дублирования метатегов, позволит переопределить их в случае чего...
При разработке компонента понадобились мне профили покупателей с их номерами телефонов и email. В документации помощи не нашел, поисковики тоже не помогли. В итоге полез в ядро и нашел там не задокументированный метод CSaleOrderUserProps::DoLoadProfiles. Положу ссылку здесь, вдруг еще кому пригодится.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».