Начальная страница

Новый проект
Руководство пользователя
×

  • Начальная страница
  • Следующая

Модуль dquad.seo

Руководство пользователя
2022
(c) Company name, 2022


1. Администратор

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.

Содержание 1. Администратор

1.1. Основная таблица для SEO
1.2. Sitemap
1.3. Страницы Last Modified (304)
Онлайн помощь создана в Dr.Explain

Unregistered version


1.1. Основная таблица для SEO

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.
Ознакомление с модулем стоит начать именно с базовой таблицы, т.к. в её понимании кроется доступ к возможностям SEO модуля.
dq_seo_type_pages
Сайт состоит из множества страниц. Страницы группируются в типовые страницы, т.к. управляются CMS и каждая типовая страница имеет
один и тот же набор динамических компонентов, отрисовывающих блоки, каждый из которых получает разные значения переменных, зависящих от конкретной страницы.

Содержание 1.1. Основная таблица для SEO

1.1.1. Идентификатор типа страницы
1.1.2. Мета теги
1.1.3. Наследование
1.1.4. Разрешённые переменные $_GET
1.1.5. noindex,nofollow
1.1.6. Параметры sitemap
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


1.1.1. Идентификатор типа страницы

Новый проект
×

  • 1. Администратор
  • 1.1. Основная таблица для SEO
  • 1.1.1. Идентификатор типа страницы
  • Предыдущая
  • Следующая

1.1.1. Идентификатор типа страницы

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.

Идентификатор типа страницы

Отталкиваясь от этого принципа, придерживаясь принципа индукции можно перейти к формализации пути.
Т.е. назначить за идентификацию типа страницы составной ключ, состоящий из полей FOLDER + PATTERN.
Макрос - символьное имя, заменяемое при обработке на последовательность программных инструкций. Выделяется в коде символами #.
Значение макроса передаётся его коду, далее алгоритм сам понимает что с этим нужно сделать.
Макросы идут в поставке модуля, однако представляют из себя масштабируемый механизм для генерации своих правил ЧПУ.
Ознакомьтесь по крайней мере с предустановленными макросами. В частности с #SMART_FILTER_PATH#. Он поможет вам создать свои правила ЧПУ для фильтра .
FOLDER - реальная папка в структуре сайта, относительно которой будут построены виртуальные ЧПУ пути.
Например /catalog/
PATTERN - обобщённый путь, где динамические части можно заменить на макросы, которые в будущем можно также формализовать и запрограммировать.
Например #SECTION_CODE_PATH#/#SMART_FILTER_PATH#/nav/page-#PAGE_N#/
Здесь в пути использовано 3 макроса
#SECTION_CODE_PATH# - в котором хранится цепочка разделов (идентификатор раздела)
#SMART_FILTER_PATH# - в котором хранятся переменные для фильтра
#PAGE_N# - в котором хранится номер страницы (постраничная навигация)
Однозначным идентификатором типовой страницы в текущем случае будет составное значение
/catalog/ #SECTION_CODE_PATH#/#SMART_FILTER_PATH#/nav/page-#PAGE_N#/
На базе типовых страниц и строится всё управление SEO на сайте.
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


1.1.2. Мета теги

Новый проект
×

  • 1. Администратор
  • 1.1. Основная таблица для SEO
  • 1.1.2. Мета теги
  • Предыдущая
  • Следующая

1.1.2. Мета теги

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.

Мета теги

Следующий набор полей отвечает за вывод мета тегов на нашей типовой странице. Значение поля также включает значения переменных, которые рассчитываются в исполняемых на странице компонентах. Как это происходит, см. в разделе SEO переменные компонента.

Теги с участием переменных компонента

H1 - тег <h1>[значение]</h1>
TITLE - тег <title>[значение]</title>
KEYWORDS - тег <meta name="keywords" content="[значение]" />
DESCRIPTION - тег <meta name="description" content="[значение]" />
TEXT - не является стандартным тегом, однако очень часто страницам выделяют seo блок, на котором ставят акцент для роботов
значение переменной доступно в свойстве страницы $APPLICATION->ShowPageProperty("TEXT"), как, к слову, и предыдущие поля.

Теги с литеральными значениями

ROBOTS - тег <meta name="robots" content="[значение]" />

Особые теги

CANONICAL - тег <link rel="canonical" href="[значение]" />
данный тег используется для обозначения роботам, что у этой страницы есть родитель, а текущая - всего лишь вариант представления родителя
для указания значения используются те же правила, что и для поля PATTERN с ограничением, что подставленные макросы входят в подгруппу тех, что
были использованы в PATTERN текущей записи

Для нашего примера
PATTERN = #SECTION_CODE_PATH#/#SMART_FILTER_PATH#/nav/page-#PAGE_N#/
мы можем использовать значение поля
CANONICAL = #SECTION_CODE_PATH#/#SMART_FILTER_PATH#/
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


1.1.3. Наследование

Новый проект
×

  • 1. Администратор
  • 1.1. Основная таблица для SEO
  • 1.1.3. Наследование
  • Предыдущая
  • Следующая

1.1.3. Наследование

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.

Принцип наследования

Очень часто типы страницы представлены не только группами, но ветками наследования, например можно точно сказать, что группы страниц
с ключами
/catalog/#SECTION_CODE_PATH#/
/catalog/#SECTION_CODE_PATH#/#SMART_FILTER_PATH#/
/catalog/#SECTION_CODE_PATH#/#SMART_FILTER_PATH#/nav/page-#PAGE_N#/
Образуют одну логическую ветку.
Чтобы не копировать значения параметров для каждого нового типа просто указываем PARENT_ID = ID (из этой же таблицы).
Все не указанные в дочерней типовой странице параметры будут наследованы от родителя.
Также данный параметр отвечает за построение навигационной строки (хлебных крошек).
Промежуточное значение ссылки для 2го типа страницы (в общей цепи наследования) будет выглядеть так
<a href="/catalog/#SECTION_CODE_PATH#/#SMART_FILTER_PATH#/">[h1]</a>
h1 в данном случае будет взят из таблицы dq_seo_sitemap, которая заполняется роботом-обходчиком crawler.

Уникальные(кастомные) страницы

Здесь затронем таблицу dq_seo_custom_pages, в которой хранятся "листья" ветки типовых страниц.
Её архитектура и структура почти идентичная основной таблице. Назначение - создать исключительную типовую страницу,
параметры seo которой будут отличаться от других страниц той же группы.
Отличие состоит в том, что она должна быть привязана к какой то ветке типовых страниц, а точнее к конкретному паттерну.
Для этого используется обязательное поле TYPE_PAGE_ID (=> dq_seo_type_pages.ID).
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


1.1.4. Разрешённые переменные $_GET

Новый проект
×

  • 1. Администратор
  • 1.1. Основная таблица для SEO
  • 1.1.4. Разрешённые переменные $_GET
  • Предыдущая
  • Следующая

1.1.4. Разрешённые переменные $_GET

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.
Как известно роботы любят добавлять разные $_GET параметры к страницам, а потом их индексировать, даже если на вашем сайте не заложено
никакой логики для работы с $_GET параметрами.
Скажем робот может зайти и к образцовому ЧПУ вида /catalog/katushki/ добавить ?VAR=1.
Или вам нужно подключить какой-нибудь сервис к сайту, работа которого построена на $_GET переменных.
Для контроля таких ситуаций используются поля
ALLOW_GET_PARAMS = {"Y", "N"}
разрешить или запретить параметры $_GET для данной страницы
При этом, если вам нужно разрешить конкретные переменные, то вы указываете массив групп разрешённых переменных GET_PARAMS, хранящихся уже в таблице
dq_seo_allowed_group_vars.
GET_PARAMS указываем в виде классического ассоциативного массива, например Array("dquad", "analytics").
Используя интерфейс CMS Bitrix сериализуем к виду a:2:{i:0;s:5:"dquad";i:1;s:9:"analytics";}
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


1.1.5. noindex,nofollow

Новый проект
×

  • 1. Администратор
  • 1.1. Основная таблица для SEO
  • 1.1.5. noindex,nofollow
  • Предыдущая
  • Следующая

1.1.5. noindex,nofollow

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.
Для улучшения индексации страницы иногда требуется указать роботу "это не индексировать, по этой ссылке не ходить".
Используются соответсвующие блоки
<!-- noindex --><!--/ noindex --> или <a href=".." rel="nofollow"></a>
Чтобы обозначить такие блоки для нашей типовой страницы придуман параметр A_HREFS.
В качестве значения указываем снова ассоциативный массив из css селекторов, где в качестве ключа
идёт указание на блок DOM, а в качестве значения noindex, nofollow.

Примеры

Например
Array(
".block1" => "noindex",
".block2" => "nofollow",
".block3" => "noindex, nofollow",
)

Элемент block1

было
<div class="block1">
<a href="/tools/">Инструменты</a>
</div>
станет
<!-- noindex -->
<div class="block1">
<a href="/tools/">Инструменты</a>
</div>
<!--/ noindex -->

Элемент block2

было
<div class="block2">
<a href="/tools/">Инструменты</a>
</div>
станет
<div class="block2">
<a href="/tools/" rel="nofollow">Инструменты</a>
</div>

Элемент block3

было
<div class="block3">
<a href="/tools/">Инструменты</a>
</div>
станет
<!-- noindex -->
<div class="block3">
<a href="/tools/" rel="nofollow">Инструменты</a>
</div>
<!--/ noindex -->
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


1.1.6. Параметры sitemap

Новый проект
×

  • 1. Администратор
  • 1.1. Основная таблица для SEO
  • 1.1.6. Параметры sitemap
  • Предыдущая
  • Следующая

1.1.6. Параметры sitemap

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.
Как известно для построения sitemap.xml, используемой поисковыми роботами каждой странице назначается 4 параметра
loc - ссылка на страницу
lastmod - последняя дата изменения (считается автоматически)
priority - важность, вес (от 0 до 1)
changefreq - частота показа {"daily", "weekley", "monthley"}
Администратор может назначить вес и частоту пересмотра типу страниц.
Для этого используются параметры
SM_PRIORITY decimal(4,2) - удельный вес страницы
SM_CHANGEFREQ varchar(10) - частота пересмотра роботом
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


1.2. Sitemap

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.
Вместе с установкой модуля устанавливается:
1)фоновой процесс sitemap.generator.
выполняющий генерацию карты сайта в виде непосредственно файлов xml.
(о фоновых процессах читайте в основном файле с документацией на модуль dquad.lib)
2)робот-обходчик crawler - саппорт процесс, который может обойти ваш сайт, проверить ответы страниц и внести в потенциальный список
страниц карты сайты кандидатов.
3)агент для запуска фонового процесса sitemap.generator
4)агент для запуска фонового процесса crawler (в разработке)
Таким образом карта сайта обновляется по расписанию. А с помощью саппорт процесса crawler поддерживается и её актуальность.
Если со страницей что-то не так, она не попадёт в конечный sitemap.xml

Содержание 1.2. Sitemap

1.2.1. Структура
1.2.2. Генерация
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


1.2.1. Структура

Новый проект
×

  • 1. Администратор
  • 1.2. Sitemap
  • 1.2.1. Структура
  • Предыдущая
  • Следующая

1.2.1. Структура

Карта сайта строится на базе истории обращений к сайту, сохраняемой в таблице dq_seo_304_pages.
XML файл хранится в корне сайта /sitemap.xml и представляет след. иерархию
Группировка идёт по типу страниц TYPE_PAGE_ID, а в список попадают те записи, для которых фла PATTERN_STRICT установлен в Y.
Список страниц пишется в xml файлы в папку /upload/sitemap/
Какие страницы попадают в таблицу dq_seo_304_pages см. в разделе Страницы Last Modified
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


1.2.2. Генерация

Новый проект
×

  • 1. Администратор
  • 1.2. Sitemap
  • 1.2.2. Генерация
  • Предыдущая
  • Следующая

1.2.2. Генерация

Генерация карты выполняются с помощью запуска фонового процесса sitemap.generator (документации на фоновые процессы пока нет) со страницы
/bitrix/admin/dquad_process_list.php
Для автоматической генерации карты в агенты можно добавить функцию
\DQuad\Services\CSitemapBuilder::Autogen(); //модуль dquad.seo
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


1.3. Страницы Last Modified (304)

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.
Для реализации механизма ответов со статусом HTTP_CODE = 304 создана таблица dq_seo_304_pages.
Механизм ответа Last modified встроен в библиотеку и будет работать, если отключен Автокомпозит - технология, которая ускоряет скорость загрузки страниц, однако противоречит логике и стандартам html, придуманными мировой аудиторией разработчиков.
При исполнении любой страницы (с использованием библиотеки dquad.lib) для каждого компонента на странице вычисляется хэш,
который сравниванивается в предыдущим значением на той же странице (если запись об этой странице есть в БД).
Если хотя бы один из компонентов выдаёт новое значение хэш - это значит, что данные на странице изменились и устанавливает псл. дату изменения
страницы по текущему времени.
Также при обновлении страницы рассчитывается поле PATTERN_STRICT.

"Y"

- если URL страницы строго соответсвует регулярному выражению dq_seo_type_pages.PATTERN (+dq_seo_macros.REGEXP)

"N"

- если URL страницы попадает в кастомное для текущего сайта исключение
установленное в классе
\Shades\Seo\CSitemap::PATTERNS_EXCLUDE
создано специально для исключения определённых страниц из карты сайта
- если URL страницы не удовлетворил dq_seo_type_pages.PATTERN

Создание записи

При успешном ответе 200 на странице и отсутсвии записи на странице

Обновление записи

При успешном ответе 200, присутсвии записи в таблице и изменении временной метки

Удаление страницы

При ответе 404
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


2. Разработчик

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.

Содержание 2. Разработчик

2.1. SEO переменные компонента
2.2. Макросы
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


2.1. SEO переменные компонента

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.
Для управления seo информацией на странице используются переменные/подстановки в поля типовой страницы, например мета теги.
Генерация данных переменных возлагается на компоненты, которые подключаются на данном типе страниц.
Обращение такой переменной идёт по формату
#[COMPONENT_ID]:[SEO_VAR]#
COMPONENT_ID - идентификатор компонента на странице, управляется параметром $arParams["COMPONENT_ID"] (см. стандартную работу компонентов битрикс)
SEO_VAR - значение переменной $arResultSeo[SEO_VAR], которая
- либо рассчитывается в компоненте (коробочная версия компонентов dquad)
- либо рассчитывается в файле .seo.modifier.php, лежащей в корне шаблона компонента
(см. result_modifier.php в стандартной библиотеке битрикс)
расчёт переменной возлагается на разработчика в этом случае

Входные параметры

$arParams
$arResult

Выходные параметры

$arResultSeo

Пример

был вызван компонент dquad:sef.switcher параметром COMPONENT_ID = "sw"
разработчик рассчитал переменную $arResultSeo["COLLECTION.NAME"] = "Столы"
тогда seo администратор может указать в поле dq_seo_type_pages.H1 = #sw:COLLECTION.NAME#
а на странице получит в html коде
<h1>Столы</h1>
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


2.2. Макросы

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.
Для создания шаблона(паттерна) URL поля таблицы dq_seo_type_pages (+dq_seo_custom_pages) нужно обозначить переменные, каждая из которых
будет разбираться по особым инструкциям.
Для это создана таблица dq_seo_macros
Переменные не просто хранят значения, имеют свои параметры, от которых зависит результат исполнения кода. Назовём их макросами.

Предустановленные макросы.

CODE | FIELD | ACTIVE | GREED | TYPE | VAR | REGEXP_PART | REGEXP_FULL | EXTRACTOR
#ELEMENT_CODE# | CODE | Y | N | element | ELEMENT | [-\w]+ | NULL | \DQuad\Seo\Sef\Handlers\CElementCode ::getInstance()->ExtractVariablesFromPart
#ID# | ID | Y | N | NULL | NULL | \d+ | NULL | NULL
#PAGE_N# | NULL | Y | N | NULL | NULL | \d+ | NULL | NULL
#SECTION_CODE_PATH# | CODE | Y | Y | section | SECTION | \w+ | NULL | \DQuad\Seo\Sef\Handlers\CSectionCodePath ::getInstance()->ExtractVariablesFromPart
#SECTION_CODE# | CODE | Y | N | section | SECTION | \w+ | NULL | \DQuad\Seo\Sef\Handlers\CSectionCodePath ::getInstance()->ExtractVariablesFromPart
#SMART_FILTER_PATH# | NULL | Y | Y | NULL | SEF_FILTER | ^(?:\w+){1}\-(?:(?:[\w.0-9_]+)(?:-or-|-){0,1})+ | NULL | \DQuad\Seo\Sef\Handlers\CSmartFilterPath ::getInstance()->ExtractVariablesFromPart
Возьмём для примера паттерн #SECTION_CODE_PATH#/#SMART_FILTER_PATH#/nav/page-#PAGE_N#/
компонент dquad:sef.switcher будет анализировать указанный URL по частям, обращаясь к параметрам таблицы dq_seo_macros.

#SECTION_CODE_PATH#

Код поля | Значение | Обязательно | Примечание
GREED | Y | * | жадный алгоритм, пробуем набрать несколько схожих значений через /, например divany/kushetki
REGEXP_PART | \w+ | * | регулярное выражение проверки части, и divany, и kushetki должны быть "латинскими словами"
TYPE | section |  | тип сущности, с которой будем сверяться в БД "section" (b_iblock_section)
FIELD | CODE |  | значение, проверенное по рег. выражению доп. ищем в БД, должно присутсвовать в БД
ACTIVE | Y | * | активность записи
EXTRACTOR | ... |  | метод извлечения данных по значению переменный, например divany/kushetki
VAR | SECTION |  | передавать будем дальше для работы $arResult["SECTION"]

#SMART_FILTER_PATH#

Код поля | Значение | Обязательно | Примечание
GREED | Y | * | жадный алгоритм, пробуем набрать несколько схожих значений через /, например divany/kushetki
REGEXP_PART | ^(?:\w+){1}\-(?:(?:[\w.0-9_]+)(?:-or-|-){0,1})+ | * | регулярное выражение проверки части, первое слово должно быть "латинскими словами" далее идут "слова цифро-латиницей" с разделителем между ними в виде - или -or-
TYPE |  |  |
FIELD |  |  |
ACTIVE | Y | * | активность записи
EXTRACTOR | ... |  | метод извлечения данных по значению переменный, использует таблицу dq_seo_url_vars
VAR | SEF_FILTER |  | передавать будем дальше для работы $arResult["SEF_FILTER"]
Для этого популярного макроса создана специальная таблица, которая позволяет управлять набором ЧПУ ассоциаций, которые по определённым правилам разворачиваются в значения переменных, соответсвующий формату БД в CMS Битрикс.

Содержание 2.2. Макросы

2.2.1. Умный фильтр
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022


2.2.1. Умный фильтр

<НЕ ЗАБЫТЬ>: Замените этот текст на свой. Желательно также создать ключевое слово для этого раздела.
Данная таблица даёт управление макросом #SMART_FILTER_PATH#. В битрикс это называют умным фильтром. Хотя ничего умного тут нет.
Кириллица в URL выглядит очень длинно и сложна для восприятия человеком. Поэтому решили упростить ссылки использованием транслита.
Для программистов появилась доп. задача - прямая и обратная конвертация, когда речь заходит об URL. С помощью этой таблицы мы выстраиваем сопоставления между значение в URL и значение в БД.

Пример

CODE | ACTIVE | TRANSLIT | ENTITY | SUB_CHAIN
brand | Y | N | PRODUCT.PROPERTY.ATT_BRAND | NAME
collection | Y | N | PRODUCT.PROPERTY.KOLLEKTSIYA | VALUE
dlina | Y | N | PRODUCT.OFFER.PROPERTY.DLINA_SM |
modulnost | Y | Y | PRODUCT.PROPERTY.MODULNOST | VALUE
nalichie | Y | Y | PRODUCT.OFFER.PROPERTY.CML2_AVAILABLE | VALUE
offers | Y | N | PRODUCT.OFFER.PROPERTY.OFFERS | VALUE
price | Y | N | PRODUCT.OFFER.CATALOG.PRICE_DISCOUNT | PRICE
strana | Y | Y | PRODUCT.PROPERTY.STRANA_PROISKHOZHDENIYA | VALUE
tags | Y | Y | PRODUCT.PROPERTY.TAGS | VALUE
tsvet | Y | Y | PRODUCT.OFFER.PROPERTY.OSNOVNOY_TSVET_SKU | UF_NAME
Онлайн помощь создана в Dr.Explain

Unregistered version
(c) Company name, 2022