Модуль: Поисковая оптимизация (SEO) – версия 14.0.1 + Информационные блоки (iblock) – версия 14.0.2
Одним из ключевых моментов, появившихся в 14 версии продукта, возможность делать автоматизированные шаблоны для инфоблоков, а также появление вкладки SEO у инфоблока, разделов и его элементов, на которых можно задавать шаблоны мета-тегов: Title, Keywords, Description и так далее.
Перейдём в настройку инфоблока на вкладку SEO:
[spoiler]Нажав по кнопочке с «…», вы увидите список всех доступных шаблонов, которые можно подставить.
Шаблоны можно делать как для всего инфоблока (всех его разделов и товаров), так и для конкретных разделов, или товаров нужного раздела. Вы можете сделать настройку для всего инфоблока, а потом для конкретного раздела переопределить на свою персональную.
Так как сайт уже работал и у него были созданы свойства, которые использовались для мета-тегов, но их приходилось заполнять вручную для каждого товара или раздела, то нам нужно сделать шаблоны, которые смогут автоматически создавать у новых товаров нужные нам тексты. Поля задаваемые на сайте проекта до 14 версии, после создания правил и перевода сайта на новую схему, старые поля можно будет удалить за ненадобностью:
Начнём с «Заголовка окна браузера (META TITLE)» для элементов. Как видно из предыдущего скриншота, заголовок окна браузера для определенного товара:
Чай Руандийский Рукери Оранж Пеко / teatome.ru
Сделаем для этого тега автоматический шаблон. В карточке товара жмём по трём точкам и пытаемся найти подходящий нам шаблон, подставляющий название элемента:
Находим раздел «Поля элемента» -> «Название текущего элемента» - в поле появился шаблон «{=this.Name}» дописываем к нему «/ teatome.ru» и идём посмотреть что у нас получилось в товар, который был ранее создан:
Шаблон сработал, и мы получили название Meta Title по шаблону. Давайте попробуем создать новый товар и посмотрим как сработает шаблон на нем:
Мы создали новый товар, и как только мы нажали «Сохранить» или «Применить», шаблон срабатывает на вкладке SEO.
Повторяем наш успех, но уже с более сложным полем META DESCRIPTION:
«Купить чай руандийский черный оранж пеко. Доставка во все уголки России. Покупка без регистрации, с удобными способами оплаты - приятные бонусы от teatome.ru» - вот такой текст у нас в товаре, попробуем его собрать на шаблонах.
Обратите внимание, так как название товара стоит не в начале текста описания, нужно сделать его с маленькой буквы. Выберем из списка соответствующий шаблон:
Добавляем последний шаблон для META KEYWORDS и идём смотреть в товар, что у нас получилось:
Все поля мета-тегов заполнены. Идём в публичный раздел, посмотрим, как все это сработает. На странице с товаром, для которого мы только что настраивали теги, заходим в настройки компонента:
В настройках компонента:
Для вывода каталога используется комплексный компонент, проверяем, что мы используем новый шаблон «visual» (с выходом релиза это будет шаблон default):
В настройках видим, как выводились данные мета-тегов раньше (2). Отключаем старый вывод, как показано (1).
Отключаем для обеих настроек, (1) настройка служит для Разделов, (2) настройка служит для детального просмотра товара.
Проверяем, что включена галочка «Устанавливать заголовок страницы», чтобы компонент смог вывести наши шаблоны, созданные на вкладке SEO:
Проверяем в исходном коде страницы, что все установлено корректно:
На вкладке SEO мы можем управлять не только мета-тегами товаров, но и работать с картинками:
Для картинок анонса, детальной, а также для файловых свойств с картинками, можно устанавливать их Alt, Title и делать шаблоны названий файлов.
Нужно быть внимательным, все настройки для названий файлов срабатывают только для файлов, которые загружаются после ввода настроек. Если вы что-то меняете в настройках, все файлы, которые были загружены ранее, остаются в системе со своими названиями.
Разберем последнюю галочку "Очистить кеш вычисленных значений":
Данная галочка должна появляться как взведенная при любом изменение которое вы делаете, очищается кэш шаблонов которые вы исправляете и у вас на странице изменения происходят сразу.
Для разработчиков и кто хочет влиять на формирование результатов, существуют фильтры обработчики, часть из них могут быть вставлены через меню, часть могут быть прописаны вручную, немного расскажем про них:
- {=lower arg1 ... argN} - приведение к нижнему регистру
- {=upper arg1 ... argN} - приведение к верхнему регистру
- {=concat arg1 ... argN ", "} - сцепление строк через разделитель
- {=limit arg1 ... argN "<delimiter>" NN} - ограничение NN элементов по разделителю <delimiter>
- {=translit arg1 ... argN} - транслитерация выбранных аргументов
- {=min arg1 ... argN} - выборка минимального числового значения
- {=max arg1 ... argN} - выборка максимального числового значения
- {=distinct arg1 ... argN} - уникальные (без дублей) значения
.
В товаре перед наименованием хочу артикул проставить title не выводится
- И при использовании сканера seo сайт ложится
По сканеру, это вы имеете ввиду сканер отдельного решения которое делал Долганин:
То вам скорей нужно обратится с вопросом к нему.
Посморите правильно ли
Артикул потом название товара должно идти
В пятницу посмотрю вашу презентацию)узнаем практику нового
Юрий,эффективно ли добавлять в карту сайта каталог+разделы+товары?
У меня вывелись артикулы, прикладываю скриншот:
Напишите в Техническую Поддержку и сообщите мне номер вашего обращения, можно на почту myth@bitrix.ru посмотрим, в чем проблема именно у вас.
Нужно добавить для разделов и элементов SEO-описание. Описание выводится внизу разделов и товаров. Содержит html-тэги. Пример:
Например
Стул 1 (свойство "цвет" заполнено): Купить стул в Москве, цвет зеленый, цена Х рублей
Стул 2 (свойство "цвет" не заполнено): Купить стул в Москве, цена Х рублей
А сейчас получается, что во втором варианте будет так "Купить стул в Москве, цвет, цена Х рублей"
Планируется ли это поддерживать в шаблонах?
Ваша схема решается задачей индивидуальных правил, для тех элементов где нет свойств, или прописыванием свойств у всех элементов. Можно в будущем попробовать хранить правила, что бы не повторять их заново для таких элементов, а выбирать из сохраненных, но тут опять я попрошу вас написать идею на сайт идей:
А пока хочется больше идей и вопросов, что бы понять куда двигаться и как, ну и добавить эту идею на сайт идей было бы не плохо.
Это очень здорово, что такие возможности есть. И нас, видимо, ждет еще немало открытий и сюрпризов пока нет документации.
Николай, пока существует одно событие, которое выше Андрей описал, я только дополню:
Нужно учесть, что для такой функции как "if" необходимо обязательно перекрыть метод "onPrepareParameters" для реализации отложенного вычисления значений параметров передаваемых в "calculate"
Точнее не собственно работа этого метода, а система наследования тайтла страницы, что сделало этот метод местами бесполезным.
Это очень плохо, т.к. поломалось на живом сайте, со стабильным обновлением. Заметить сложно, возможно, что многие владельцы сайтов, обновившись не обратили внимание. Но когда пройдут апдейты поисковиков и сайты попадают в выдаче у многих наступит "праздник".
Суть проблемы.
На сайте, где большая часть материалов выводится компонентом "новости", есть набор "статических" страниц (.php скриптов) с условно постоянным контентом. В свойствах страниц прописаны Title, Description, Keywords через вызовы методов экземпляра $APPLICATION
Примерно так:
После обновления части модулей до версии 14.x.x перестал устанавливаться заголовок методом SetTitle().
Точнее, свойство страницы устанавливалось, но при этом перебивалось аналогичным свойством раздела, в котором лежит эта страница.
До обновления SetTitle() страницы имел высший приоритет над SetTitle()-ом родительского раздела, после обновления это перестало работать.
Повторю, это очень плохо, т.к., полагаю, многие просто пока не отследили этот эффект. Когда он проявится в поисковой выдаче, будет уже поздно
Полагаю это как-то связано с глобальными изменениями SEO-механизмов, тех, что описаны в данном посте.
Писать о таком баге, не видя, что у вас происходит на самом деле на сайте бессмысленно, его желательно смотреть на вашем сайте.
Вам нужно обратится в нашу техническую поддержку, указать доступ к проекту, и если не сложно скиньте номер тикета мне на почту myth@bitrix.ru я проконтролирую, в чем была проблема.
Мы не меняли поведение SetTitle
В компонентах bitrix:catalog.section строки 1116-1141 и bitrix:catalog.element строки 937-963
там выполняется проставление мета-тегов, оберните код хотя бы в условие:
if ( $arParams['SET_META'] )
{
...
}
А то на страницах вне каталога, где выводятся товары, сбиваются мета-теги. Наверно в других компонентах, где будет поддерживаться новое проставление мета-тегов, также бы сделать.
На всех проектах установил последние обновления и не вижу описанных функций
У меня продвиженцы ещё с презентации ждут с нетерпением этого обновления
Если у нас свои шаблоны компонета catalog, то их придется доработать для того, чтобы этот функционал заработал?
$ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues($arSection["IBLOCK_ID"], $arSection["ID"])
а надо
$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arSection["IBLOCK_ID"], $arSection["ID"])
ну и, возможно, в остальных компонентах, имеющих отношение к разделам, в спешке поставили не то
Но идея замечательная, если вас не затруднит оставьте ее здесь:
И обнаружил, что {=this.Name} выдергивает откуда-то на морду сайта старое длинное значение.
В админке все нормально - название короткое.
Кэш чистил везде, где только можно: в инфоблоке, в разделах, по сайту в целом.
Не помогает.
В чем может быть проблема?
Как-то так:
Вот, что установлено в админке:
TITLE выводится в шаблоне сайта через
С ALT / TITLE в картинках - такая же петрушка. Не смог всплывающий TITLE перехватить.
P.S. Хотел картинками поделиться через Б24, но так и не понял, можно ли их сделать абсолютно публичными.
P.P.S. Обратите внимание на желтые подчеркивания. Что-то явно не так.
Для вашей задачи нужно использовать "Заголовок товара" - это поле сделано как раз для переопределения названия и вывода его на публичных страницах:
Теперь с выводом, у вас используются собственные шаблоны, не шаблоны из поставки, я не уверен, что новая схема SEO без правок у вас заработает. Вам нужно посмотреть как сделано у нас в шаблонах и забрать кусок кода к себе.
По артефактам подчеркнутым у вас желтым, даже затруднюсь ответить, у меня на установках такой проблемы нет, это опять может быть связано с правками у вас, более детально можно сказать только получив доступ к вашей установке. Для этого вы можете создать обращение в техническую поддержку, ребята подскажут, что это за проблема или почему там выводится такое.
Если не возражаете, давайте посмотрим на скриншоты 2 и 3.
Мы видим, что:
- Заголовок товара на морде берется именно из поля META TITLE. (так, видимо, задумал человек, который когда-то делал сайт)
- Поле "Заголовок товара" в админке тоже кастомизировано. Как его вызвать в шаблоне?
Ключевой вопрос:Проверил на демо-магазине:
P.S. Есть у меня подозрение, что два сайта (боевой и экспериментальный) узлом завязались.
Т.е. при попытке редактирования элемента на new.supertents.ru вызывались админские куски
Оба сайта обслуживаются разными Битриксами, исползуют разные базы, общего у них только домен supertents.ru.
Бкду разбираться.
P.P.S. Уточнил - нет, завязывания узлом не было. И на боевом сайте все работает.
Значит это только на девелоперском название и текст анонса где-то застряли...
Если для сайта делается дев версия, то недостаточно поменять подключение к базе в dbcon, расположенном в /bitrix/php_interface/
Как потом выяснилось есть файл /bitrix/.settings, в котором также есть пароли к базе. Он появился с введением технологии D7.
Если не поменять в нем настройки, то возникает описанная выше ситуация. В админке все ок, а на сайте он выводит значения из боевой базы, если там такой инфоблок есть.
- Объект отнесен к двум категориям (разделам)
- Указываем в шаблонизаторе TITLE = {=concat this.sections.name " / "} (Путь до текущего элемента)
Видим, что в админке получился один путь, а в публичной части - другой:Это bitrix.catalog.element комплексного каталога.
Но, повторюсь, название объекта берется не из NAME, а из TITLE. Вызов зашит не в WORK_AREA, а в шаблон сайта.
Тогда вопрос по новому шаблону уже задан (чуть выше.)
Изменение SEO-поля "Заголовок товара" не отражается в публичной части.
Уточнение:: в цепочке навигации название меняется, в <H1> - нет,
Кстати, а почему "Заголовок товара"? А если это статья?
ИМХО, "Полное название" более универсально.
Может стоить его вынести (продублировать) на закладку с коротким названием? Обзываешь объект и сразу видишь, как он будет называться полностью в публичной части.
До завтрашнего вебинара!
Есть База ~20к позиций, где значительная часть имеет кастомные заполненные поля под СЕО. Потому хотелось бы пробежаться скриптом и перенести значения. Ведь функционал более удобен в дальнейшем использовании.
Цена идет в заголовок с двумя нулями. То есть {=this.catalog.price.retail} дает строку типа 1499,00 руб. Ничего нельзя сделать средствами шаблона?
Как теперь из пользовательского свойства перенести данные в те самые шаблоны???? Судя по коду для выборки используется конструкция:
$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arResult["IBLOCK_ID"], $arResult["ID"]);
$arResult["IPROPERTY_VALUES"] = $ipropValues->getValues();
Каким образом туда записать? Как всегда, никакой доки нигде нет, ни в блогах ни в описании АПИ. Просьба предоставить четкий пример вызова нужного метода с помощью которого можно будет записать строку, например, в шаблон тайтла для раздела.
сделала как вы описали в админке, но в публичке может из-за того, что вывод каталога сделан простыми (не комплексным) компонентами не подцепляются мета-данные. как настроить?
Разницы нет комплексный или не комплексный компонент, лишь бы это были новые адаптивные дефолтные шаблоны.
Так вот вопрос: можно ли как-то задать титлы и мету для корня инфоблока(SECTION_ID=0)?
2) На новом сайте модуль не работает
Аналогично, в шаблоне header прописано
Правильно я понимаю, что все изменения будут работать только при создании новых новостей/статей/товаров? То есть если у меня уже есть каталог из 1000 товаров в магазине, то новые настройки/шаблоны SEO будут начинать работать для новых,создаваемых товаров, а старые будут оставаться не заполненными или заполненными не корректно?
(новичок)
Поясню:
Задал шаблон для (раздел - Статьи) META TITLE примерно так как написано в Вашей статье.
При создании новой записи - статьи, как и написано у Вас, шаблон заработал.
Однако, для ранее написанных статей - нет. Кеш сбрасывал.
У меня есть 2 страницы (Главная, Каталог), я хотел бы чтобы для них был META TITLE скажем:
"Материалы для дома: магазин "ДОМ": Столы, стулья."
На этих страницах размещены компоненты Каталога товаров.
При выборе (клике) на соответствующий раздел Каталога или на елемент каталога, должен запускаться другой шаблон, скажем:
"Столы: магазин "ДОМ": Столы, стулья" или
"Купить стол ДУБОВЫЙ за 5 рублей: магазин ДОМ..."
Что же происходит: при переходе на страницы действует не шаблон для этих страниц а шаблон для компонентов (точнее инфоблоков) и получается, что так как раздел каталога не выбран у меня в TITLE отображается:
" : магазин "ДОМ": Столы, стулья." (то есть не находится наименование раздела шаблона для раздела каталогов)..
Как сделать, чтобы работало корректно?
Спасибо.
У меня есть 2 страницы (Главная, Каталог), я хотел бы чтобы для них был META TITLE скажем:
"Материалы для дома: магазин "ДОМ": Столы, стулья."
На этих страницах размещены компоненты Каталога товаров.
При выборе (клике) на соответствующий раздел Каталога или на елемент каталога, должен запускаться другой шаблон, скажем:
"Столы: магазин "ДОМ": Столы, стулья" или
"Купить стол ДУБОВЫЙ за 5 рублей: магазин ДОМ..."
Что же происходит: при переходе на страницы действует не шаблон для этих страниц а шаблон для компонентов (точнее инфоблоков) и получается, что так как раздел каталога не выбран у меня в TITLE отображается:
" : магазин "ДОМ": Столы, стулья." (то есть не находится наименование раздела шаблона для раздела каталогов)..
Как сделать, чтобы работало корректно?
Спасибо.
И
Можно или написать свою функцию которая будет считать количество символов, или воспользоваться
{=limit arg1 ... argN "<delimiter>" NN}
Указав как разделитель пробел и количество слов, будет менее точным, но сработает.
Написать свою функцию, думаю, тоже будет хорошим решением, но было бы тогда замечательно завести отдельное место на сайте Битрикса (тему на форуме или что-то ещё), куда примеры этих функций люди бы скидывали, чтобы другим не приходилось потом писать одно и то же, и дать на это место ссылку в документации, к примеру
Цены заливаются импортом раз в сутки.
ответ
свойство раздела UF_TEST
{=lower parent.property.test}
(как вариант элемент привязан к нескольким разделам)
{=parent.property.свойство} не проходит...
Есть товар, у инфоблока которого есть свойства, к примеру "свойство1", этот товар имеет ТП, у инфоблока которого тоже есть свойства, к примеру "свойстваТП1". Свойство "СвойствоТП1" или поля родителя выводится без проблем; нужно вывести в шаблонах СЕО из инфоблока ТП "свойство1", т.е. свойства родителя в терминологии Битрикса.
Может кому пригодится
Зачем?
SEO-возможности это инструмент, который на достаточно низком уровне дает функциональность работы над полями. Высокоуровневных возможностей в нем мало.
Мы выпустили модуль в МП для них.
Возможность применения пользовательских функций при заполнении SEO-полей — это здорово, приятно, красиво. И очень нужно SEOшникам.
Осталось только написать сами функции, что мы и сделали.
Представляем вашему вниманию новый модуль в маркетплейсе —
После установки
1. Удаление html-сущностей
Иногда при использовании в seo-шаблоне анонсного или другого поля с html внутри мы можем увидеть следующую картину. Html-сущности не интерпретируются и портят всю красоту текста.
[IMG]
[IMG]
Для удаление тегов в данном случае нужно использовать функцию iv_strip:
Пример: {=iv_strip this.PreviewText}
Результат:
[IMG]
2. Условие Если — то — иначе
С нашими SEO-фильтрами вы можете предотвратить ситуацию, когда одно из свойств окажется незаполненным.
Пример: {=iv_ifelse this.property.FREE_DELIVERY "Free delivery: #" "No free delivery" }
Первый аргумент — тестируемое свойство (пусто/не пусто). Второй — что вывести в случае если условие не пусто (можно использовать # чтобы подставить значение самого свойства. Третий аргумент — что вывести в случае, если условие пусто.
3. Ограничение длины выводимого текста по символам
Мы помним, что в поле “description” (как рекомендует Яндекс) следует размещать не более 150 символов. Остальные не учитываются. Пользуйтесь на здоровье, у нас есть SEO-фильтр #PRO.
Ограничение длины выводимого текста применяется для символов, а не по словам, как в стандартном фильтре limit. При этом не режутся слова, те выводятся слова до тех пор пока итоговая длина не станет больше указанной
Пример: {=iv_limit_chars this.PreviewText 20}
4. Округление числа и округление цены
Так как цена — это не просто число, но и валюта, и разделитель целой/дробной части, разделитель разрядов, итд, мы учитываем эти настройки при ее округлении. То есть, из текста получаем числовое значение цены, его округляем в соответствии с указанным правилом, потом опять “оборачиваем” в текст.
Настройки следует применять аккуратно, чтобы не ввести никого в заблуждение)
4.1. Классическое
Пример: {=iv_round this.property.INT_PROPERTY 2}
4.2. Округление числа в меньшую сторону
Пример: {=iv_floor this.property.INT_PROPERTY}
4.3. Округление числа в большую сторону
Пример: {=iv_ceil this.property.INT_PROPERTY}
4.4. Округление цены (учитываются настройки валют в соотв. модуле)
Пример: {=iv_round_price this.catalog.price.BASE 0}
4.5. Округление цены в меньшую сторону
Пример: {=iv_floor_price this.catalog.price.BASE}
4.6. Округление цены в большую сторону
Пример: {=iv_ceil_price this.catalog.price.BASE}
Более того, для таких свойств нет специальной настройки SEO-свойств: есть явные настройки для картинки анонса и детальной картинки, но нет настройки шаблонов ALT и TITLE для "прочих картинок" (изображений из файловых свойств).
Возможно ли и как правильно выполнить настройку для изображений файловых свойств?
Сейчас, заглядывая в код стандартных компонентов, без пол-литра сложно разобраться, хотя, казалось бы, вам самим как разработчикам системы было бы куда удобнее иметь что-то типа метода {какой-то класс}::GetSEOProps($id, $type = 'element')
Написал вот такую конструкцию - {=concat this.sections.name " "} {=this.Name}
Получил - Межкомнатные двери ZaDoor ДО-София 1С2М Венге (каталог - Межкомнатные двери, подкаталог - ZaDoor, название текущего элемента - ДО-София 1С2М Венге )
Из конструкции необходимо убрать - ZaDoor (название подкаталога)
Вопрос - Как это сделать?
Не подскажете, как это можно исправить/куда копать?