Модуль прост в освоении, имеет интуитивно понятный интерфейс, легко и гибко настраивается. От клиентов, использующих наш модуль после опыта работы с другими модулями, мы получаем исключительно хорошие отзывы. Попробуйте и Вы!
Модуль устанавливается за пару кликов, а первичная настройка займёт всего несколько минут. При этом модуль построен на современных механизмах, имеет привычный интерфейс системы 1С-Битрикс, поэтому работа с модулем доставит одно удовольствие.
А если возникнут какие-то вопросы – мы всегда рады помочь: не только быстрыми и точными ответами, но и оперативными доработками модуля: многие новые функции в модуле созданы по просьбам наших клиентов, причём большинство из доработок выполнены в максимально короткие сроки.
На данный момент модуль имеет в комплекте следующие возможности:
SEO для умного фильтра – установка собственных SEO-данных (заголовки, описания, дополнительные SEO-тексты и др.) на страницы фильтра (подробнее),
АвтоSEO для умного фильтра – дополнительное SEO для умного фильтра: установка SEO-данных автоматически (подробнее),
SEO для произвольных страниц (в т.ч. подмена адресов) – установка мета-тегов любых страниц сайта в 1 клик, а также установка собственного «красивого» адреса для любой страницы, поддерживается работа прямо на странице сайта: кнопка «SEO-мастер» (подробнее),
перелинковка – модуль позволяет на одних страницах выводить ссылки на другие страницы, причём также возможна группировка (подробнее),
базовые редиректы сайта – редиректы с http на https, с www на без-www (и наоборот), редирект для удаления index.php из адреса, редирект для добавления слеша в конец адреса (подробнее),
произвольные редиректы – любые редиректы с одной страницы сайта на другую, с возможностью импорта правил из Excel (подробнее),
канонические ссылки <link rel="canonical"> – настройка канонических ссылок в 1 клик (подробнее),
ЧПУ для постраничной навигации вместо PAGEN_1=2 – например /page-2/ или /page2/ а в некоторых случаях и просто /2/ (подробнее),
работа с внешними ссылками – подтверждение перехода по внешней ссылке, добавление "noindex, nofollow",
просмотр текущих SEO-данных – удобная кнопка на сайте, которая позволяет увидеть все установленные на странице SEO-данные,
разделы-ссылки – повышение удобства навигации пользователей по меню каталога с помощью добавления одного раздела в разные подразделы (подробнее),
анализатор запросов – просмотр информации о посещаемости сайта роботами, с предоставлением подробной информации (подробнее).
блокировка заданных роботов – модуль позволяет блокировать любых заданных роботов - например ненужных роботов, которые не несут никакой пользы, но создают высокую нагрузку на сервер (подробнее),
регионы для продвижения – современный функционал для работы с регионами (на поддоменах, отдельных доменах или на одном домене), который позволит продвигать сайт отдельно для каждого региона (подробнее),
генератор карты сайта sitemap.xml – гибко настраиваемая генерация карты сайта, в т.ч. с регулярной автоматической выгрузкой по Cron и выгрузкой изображений (подробнее),
генератор robots.txt – простой и удобный функционал для создания robots.txt без необходимости его постоянной перегенерации (подробнее).
SEO для умного фильтра
Основной функционал модуля – SEO для умного фильтра. Это позволяет реализовать установку «правильных» SEO-данных для страниц умного фильтра. Модуль создаст тысячи новых страниц с уникальным и качественным контентом для продвижения. Это добавит в поисковые системы новые страницы сайта для продвижения, а сайт получит новых пользователей, которые ищут Ваши товары и услуги.
Как по настройкам, так и в работе, функционал кардинально отличается от модулей конкурентов. Основные преимущества перед аналогами:
прозрачная работа – модуль заранее генерирует все заданные страницы для умного фильтра, и сразу назначает им SEO-данные (их даже можно редактировать вручную при необходимости, а также заблокировать от изменений, если требуется), таким образом Вы сразу контролируете, для каких ссылок модуль добавляет данные, и управляете генерацией этих данных,
производительность – модуль работает максимально быстро, на странице публичной части для работы SEO умного фильтра выполняет всего один SQL-запрос, при этом используется кеширование,
красивые ссылки – созданным страницам умного фильтра за пару кликов можно назначить «красивые» адреса,
ручная донастройка (при необходимости) – создавайте и редактируйте ссылки вручную, указывая каждой ссылке конкретные SEO-данные,
мощные SEO-тексты – собственная разработка функционала работы с SEO-текстами, что добавляет огромные, почти неограниченные возможности генерации текстов,
предпросмотр генерируемых данных – перед сохранением можно одним кликом (или горячей клавишей) посмотреть пример результата,
автоматические генераторы – модуль имеет автоматический генератор правил и автоматический генератор ссылок в правилах, что делает удобной и быстрой массовую работу с правилами и ссылками, разделами и свойствами.
Кроме того, модуль имеет огромное количество других инструментов и настроек, позволяющих выполнить SEO-оптимизацию максимально эффективно и просто! Для Вашего удобства, все функции, в том числе и настройки модуля, собраны в меню модуля (Административный раздел – Маркетинг – SEO-мастер).
Также планируется добавление новых инструментов и возможностей, принимаем заявки и предложения на бесплатную доработку модуля.
Основное назначение модуля - генерации SEO-данных для умного фильтра. Это позволяет легко создавать произвольные мета-данные для произвольных страниц фильтра, благодаря чему Вы повышаете количество страниц в поиске (важно отметить, что это качественные страницы). Это, соответственно, увеличивает количество пользователей, перешедших на сайт из поисковых систем, повышает продажи и т.д.
В отличие от других подобных решений, наш модуль заранее (по заданным в правилах условиям) генерирует все ссылки, совпадающие со ссылками фильтра на сайте, и при их открытии устанавливает на странице нужные SEO-данные. Другими словами, наш модуль работает абсолютно прозрачно, и в этом отношении не имеет аналогов.
Напомним, что другие аналогичные модули не генерируют заранее все необходимые страницы, а выполняют всю работу в момент открытия страницы. Это, во-первых, значительно увеличивает нагрузку (сайты с большим количеством настроенных правил и большим количеством товаров и свойств будут тормозить), во-вторых, нет возможности просмотреть список целевых страниц и отредактировать для них все SEO-данные. В третьих, решение проблем в таких случаях очень затруднено, т.к. работа таких модулей происходит по сложным алгоритмам, и зависит от большого количества входных данных. Наш модуль лишён всех этих проблем: он для каждого правила заранее создаёт список ссылок, и для каждой ссылки можно (в случае необходимости) подкорректировать сгенерированные данные, или полностью заменить их собственными.
Кроме того, архитектура модуля позволяет создавать такие ссылки вручную. Т.е. Вы можете любым длинным и сложным ссылкам на сайте задать собственный «красивый» адрес, для которого будут задаваться собственные мета-теги, и по заданному адресу страница будет именно открываться, а не перенаправляться.
Например, у Вас есть особо популярная страница каталога /catalog/smartphones/iphone/12max/, и Вы хотите, сделав для неё индивидуальный дизайн, чтобы она открывалась по адресу /iphone-12max/ - модуль позволит это сделать за 2 клика! Откройте старую страницу, нажмите на панели инструментов кнопку «SEO-мастер», в форме укажите новый короткий адрес, и сохраните. Всё! Теперь эта страница будет доступна по отдельному адресу (не редирект, а именно открытие по данному адресу), и для неё Вы сможете задать любые собственные SEO-данные. А средства Битрикса позволяют применить к ним отдельный дизайн (отдельный шаблон сайта). Таким образом некоторые важные страницы можно сделать нестандартными.
Также модуль содержит огромное количество дополнительных функций, которые помогут продвинуть Ваш сайт в топ выдачи поисковых систем. Все эти функции, несмотря на их различное назначение, выполняют одну общую задачу - внутреннюю поисковую оптимизацию сайта. Т.е. эти функции «наводят порядок» на сайте с точки зрения SEO.
К таким функциям относятся:
Установка модуля в данном случае стандартная, не отличается от установки других решений. На странице модуля нажмите кнопку «Попробовать», укажите адрес сайта и подтвердите кнопкой «Установить» - после этого установка модуля продолжится на Вашем сайте. Необходимо нажать кнопку «Загрузить» и согласиться с условиями лицензионного соглашения. После завершения скачивания остаётся нажать кнопку «Установить» - всё! Модуль установлен.
Теперь меню управления модулем находится в меню «Маркетинг», кнопка «SEO-мастер».
Структура меню следующая:
Работа с функционалом «SEO для умного фильтра» модулем начинается с создания профиля. Профиль содержит важные настройки, определяющие основополагающие параметры генерации ссылок - привязку к сайту, инфоблок, тип фильтра и шаблон его ссылок, а также валюту - для случаев использования фильтра по цене.
Особое внимание следует уделить шаблону ссылок. Модуль будет генерировать ссылки, в которых реальный адрес будут построен по данному шаблону, а желаемый - по шаблону в правиле генерации. Соответственно, правильность заполнения данного поля имеет критическое значение для корректной работы сгенерированных ссылок. Определить шаблон можно по-разному, например, если на сайте открыть настройки компонента «Каталог»:
Здесь необходимо скопировать сначала значение поля «Каталог ЧПУ (относительно корня сайта)», т.к. это означает начальный путь ссылок, и после этого скопировать значение поля «Url раздела для умного фильтра». Таким образом, в данном примере правильный путь такой:
/catalog/#SECTION_CODE#/filter/#SMART_FILTER_PATH#/apply/
Если же у Вас каталог работает без ЧПУ, то следует указать путь к компоненту и добавить ?#SMART_FILTER_PATH# чтобы получилось примерно так:
/catalog/?#SMART_FILTER_PATH#
Т.е. макрос #SMART_FILTER_PATH# означает генерируемую модулем последовательность параметров.
Для генерации ссылок необходимо создать правило генерации. В правиле важно выбрать созданный ранее профиль. Собственно, для этого и была создана система профилей: в новом правиле гораздо проще один раз выбрать профиль в выпадающем списке, чем каждый раз указывать несколько разных параметров.
Также укажите раздел инфоблока, относительно которого будет работать данное правило. Сам по себе умный фильтр также всегда работает в контексте какого-то раздела, для которого он:После заполнения параметров на вкладке «Настройка» нажмите кнопку «Применить»: станут доступны все оставшиеся вкладки: «фильтр», «SEO», «ссылки», «перелинковка».
Умный фильтр для каждой комбинации параметров (свойства и цены), выбранной пользователем, создаёт собственный адрес. Наш модуль для корректной работы полностью повторяет эти адреса, соответственно настройка фильтра сводится к настройке свойств и цен для эмуляции выбора пользователем.
В правиле могут быть заданы как свойства, так и цены (на сайтах обычно используется только один тип цен, поэтому и в профиле нужно выбирать только один тип цен), либо и то и другое одновременно. В отношении цен всё достаточно просто - следует указать минимальную и максимальную цену - это то, что пользователь выбирает в блоке «Цена: от ... до ...». Вы также можете указать только одно из значений - либо минимальную цену, либо максимальную. Например, если хотите сгенерировать ссылки по типу "Купить телевизоры недорого", нижнюю цену не указывайте, а верхнюю укажите, к примеру, 5000 рублей - в результате на страницах с текстом "недорого" будет выбрана цена 5000 рублей.
Далее добавьте какое-либо свойство. При этом появляется блок свойства с выбором режима. Всего режимов 3:
Выберите нужный режим, исходя из Вашей задачи. Скорее всего, Вам нужен первый режим - в этом режиме модуль сам находит все значения и по каждому генерирует отдельную ссылку. Т.е. классический вариант. При этом, в настройках модуля можно указать что искать - все возможные значения, либо же только все используемые значения (актуально, например, если в свойстве могут быть неиспользуемые значения). Для второго и третьего режимов доступны дополнительные инструменты для удобства настройки - фильтр по тексту, а также кнопки быстрого выбора (выбрать всё, поменять выбор, отменить выбор у всех).
После этого заполните поле «Код для ссылок» - с таким кодом каждое поле будет фигурировать в «красивом» адресе. По умолчанию подставляется символьный код, приведённый к нижнему регистру. Укажите код кратко, красиво и лаконично. Также возможен вариант с пустым символьным кодом - в таком случае название свойства/цены не попадает в ссылку. Кроме того, если перед кодом указать символ @ то для свойства меняется порядок, например, если при указании кода brand свойство в ссылке выглядит как "brand:samsung" (двоеточие можете заменить на любой собственный символ), то при указании кода @brand ссылка выглядит как "samsung-brand". Конечно, для данного случая это бессмысленно, но это может быть полезно, например, в таких случаях, когда вместо "listov:5" нужно сделать "5-listov" - это делает ссылку более красивой и читабельной.
На этом настройка фильтра завершается.
На вкладке «SEO» Вам необходимо заполнить мета-теги (и некоторые дополнительные поля) для ссылок, используя макросы. Макросы - это заменяемый текст. вида #TEXT#. Это необходимо в связи с тем, что данные нам необходимо заполнить один раз, а использовать для каждой ссылки. Например, в качестве заголовка H1 можно использовать такой текст:
Купить куртки #PROPERTY_BRAND.VALUE#
При генерации каждой ссылки макрос #PROPERTY_BRAND.VALUE# будет заменён на название бренда, получатся значения вида «Куртки Stockli», «Куртки Tombolini» и т.д.
Если у Вас фильтр настроен на несколько значений, следует использовать несколько макросов, например:
Купить куртки #PROPERTY_BRAND.VALUE# (материал: #PROPERTY_MATERIAL.VALUE#)
И в данном случае результат будет выглядеть как «Куртки Stockli (материал: кожа)».
В этих примерах были использованы макросы группы «Поля из фильтра» - т.е. это макросы для полей, которые Вы выбрали на вкладке «Фильтр».
Также, с учётом того, что правило настраивается в контексте раздела, мы можем выбрать дополнительные макросы, относящиеся к текущему разделу, или его инфоблоку, например, название раздела, или какое-либо из его свойств, или даже какое-либо из его SEO-полей.
В качестве названия ссылки следует выбирать короткое название, которое будет хорошо выглядеть в ссылке при использовании перелинковки на сайте. Это же относится и к названию страницы в хлебных крошках (хлебные крошки - это цепочка навигации на текущей странице). Остальные SEO-поля заполняйте на своё усмотрение.
Далее модуль предлагает настроить параметры ссылок: запрет индексации, запрет добавления в поиск, запрет добавления в карту сайта, а также параметры добавления в карту сайта (приоритет и частота изменения) - задавайте эти параметры в соответствии с Вашей задачей.
Остаётся только заполнить (при необходимости) дополнительные SEO-поля. Модуль предлагает 9 дополнительных текстовых SEO-полей, которые Вы можете выводить на странице в любом месте. Обычно такие тексты используются, например, для описания над списком товаров, описания под списком товаров, дополнительного описания под списком товаров и т.д. - но их выводить на сайте необходимо вручную. При этом, для удобства, Вы можете назначить данным полям собственные коды и названия - это упростит работу с ними как на этапе заполнения, так и на этапе вывода на сайте.
Обратите внимание, что модуль предлагает различные наборы полей, в т.ч. «умные» поля - это такие поля (начинаются с Z_ - например, #Z_PRODUCTS_COUNT#), которые после генерации именно в таком виде и находятся в тексте, а заменяются на реальные значения только при выводе на сайте. Это сделано для того, чтобы некоторые значения рассчитывать не в момент генерации ссылки, а в момент вывода - тогда данные всегда будут актуальные. Например, определение числа товаров есть как обычное поле, а есть как «умное» поле - и если после генерации прошло много времени и были добавлены новые товары, то и использованием обычного поля текст будет содержать старые данные, а с использованием «умного» поля - актуальные данные.
Теперь почти всё готово для генерации ссылок. Остаётся только указать шаблон, по которому данное правило будет генерировать «красивые» ссылки. Здесь используются те же самые макросы, что и в шаблоне в профиле, однако добавлен макрос #FILTER_PATH#, который означает сгенерированный модулем блок данных для свойств и цен.
Вы можете настраивать «красивые» какими угодно. Например, если у Вас каталог находится в разделе /catalog/, Вам совершенно необязательно указывать «красивые» ссылки с тем же /catalog/ - можете настраивать их хоть от корня сайта. Например, раздел с телевизорами можно вообще «вынести» из каталога в корень сайта, т.е. перенести из /catalog/tehnika/televizory/ в /tv/. При этом в некотором случае бывают проблемы, если на сайте что-то сделано нестандартно. За дополнительной информацией обращайтесь в рубрику «Вопрос-ответ», блок «Решение проблем», или пишите нам.
Настройка пунктуации для генерации указанного блока данных расположена здесь же, Вы можете настроить спецсимволы, которые будут использоваться модулем для генерации ссылок, для наглядности внизу автоматически обновляются примеры.
После завершения настройки нажмите кнопку «Применить», и теперь Вы можете нажать кнопку «Генерировать»: это запустит процесс генерации ссылок. При большом количестве страниц процесс может идти достаточно долго. Индикатор прогресса расположен прямо на кнопке генерации.
Важно отметить, что ссылка в данном случае не является новой страницей сайта, т.к. модуль не создаёт новые страницы сайта, он лишь превращает виртуальные страницы сайта в обычные (почти).
Теперь, когда генерация окончена, Вы можете в списке ссылок проконтролировать создавшиеся ссылки на примере одной из них - важно, чтобы у них были корректные пути (как реальный, так и желаемый). Также проверьте SEO-данные. Полную информацию по ссылке можно получить, если дважды кликнуть на ней (откроется всплывающее окно), либо кликнуть на идентификаторе ссылки - ссылка откроется в новом окне.
Также для проверки кликните ссылку красного цвета - откроется страница («реальный адрес»), которая должна перевести на желаемый адрес (тот, который указан зелёным), и при этом Вы должны видеть корректно работающую страницу.
В модуле имеется понятие блокировки - это опция ссылки, которая блокирует её от изменений при автоматической генерации (от изменений вручную блокировка не работает). По умолчанию, модуль автоматически блокирует ссылку при ручном изменении - чтобы все сделанные вручную изменения не были утеряны при следующей генерации. Настройки блокировки - в настройках модуля.
Добавление ссылок в поиск и карту сайта выполняется автоматически, в соответствии с настройками в правиле генерации.
Добавление в поиск предполагает автоматическое (при генерации ссылок) создание индекса для каждой ссылки, благодаря чему при поиске на сайте пользователи смогут находить соответствующие ссылки из SEO для умного фильтра.
Добавление в карту сайта предполагает автоматическое (при ручной генерации карты сайта в Битрикс) добавление всех ссылок в XML-карту сайта, расположенную в корне сайта. Файлов карт сайта может быть много, это зависит от общего количества ссылок. При этом все карты сайта автоматически добавляются в основную карту сайта. Модуль позволяет автоматически генерировать карту сайта при любом изменении ссылок модуля, но при большом количестве ссылок это будет сильно «тормозить».
Перелинковка - это размещение на странице сайта ссылок на другие страницы, в данном случае это ссылки на другие страницы модуля, отобранные по заданным критериям. В целях создания гибкого механизма, предусмотрены различные варианты критериев. Это (а также некоторые другие нюансы) делают перелинковку самым сложным аспектом нашего модуля.
Прежде всего, важно осознать и запомнить, что все ссылки модуля хранятся в одной таблице базы данных, в виде длинного списка ссылок, и отбор происходит только по этому списку. При этом условия отбора можно задавать различные. В настройках компонента условия отбора регулируются режимом, а название режима определяет то, откуда в конечном счёте берутся ссылки.
Например, режим «по умолчанию» требует знать текущее правило генерации: оно либо должно быть явно указано в настройках компонента, либо оно определяется автоматически, если текущая страница (на которой пользователь находится) тоже является ссылкой модуля. Если правило не найдено, перелинковка не выведет ссылок. Если правило найдено, модуль смотрит на выбранные в этом правиле другие правила перелинковки: если они заданы, то показывает ссылки из них, иначе показывает ссылки из самого правила. И всё, никаких дополнительных условий.
Режим «Поле «Правила для перелинковки»» говорит сам за себя - будут использованы только ссылки из привязанных правил. Т.е. это почти как режим «по умолчанию», с тем лишь различием, что если другие правила не привязаны, ничего не будет выведено. Т.е. текущее правило определяется точно так же, а затем используем исключительно ссылки из привязанных к данному правилу других правил.
Режим «Правило» тоже похож на режим «По умолчанию», с тем лишь отличием, что не использует другие привязанные правила. Т.е. точно так же определяется текущее правило, и только из этого правила будут показаны ссылки. Т.е. ничего лишнего, только ссылки текущего правила.
Режим «Раздел» действует немного иначе чем три предыдущих: вместо поиска текущего правила он ищет текущий раздел, по аналогичным критериям: если в настройках компонента указан параметр «ID раздела», то его и берём, иначе определяем раздел из текущей страницы, если она является ссылкой SEO-модуля. И если раздел найден хотя бы по одному из указанных критериев, будут выведены только ссылки, относящиеся к этому разделу (а если точнее, то только те ссылки, которые относятся к правилам, настроенным на указанный раздел).
Режим «Профиль» работает аналогично режиму «Раздел»: ищет ссылки, относящиеся к профилю. Профиль определяется похожим образом: если в настройках компонента задан параметр «ID профиля», то используется он, иначе - профиль из текущей страницы, если она является ссылкой модуля. Если раздел найден, будут выведены ссылки, которые относятся к правилам, привязанным к данному профилю.
Режим «Произвольный» не накладывает дополнительных ограничений на выборку. Т.е. выводит все найденные ссылки.
Также, важно понимать, что нет лёгкой возможности выводить всё в индивидуально режиме, т.е. в каждом разделе что-то по своей логике. Конечно, такое можно сделать, но это сложно, и обычно используется один общий вариант на весь каталог, поэтому для всего сайта нужно заранее выбрать один режим.
Другими словами, здесь не работает схема «Для этого раздела вывести эти 10 ссылок, а для того раздела вывести вот те 20 ссылок».
В модуле, начиная с версии 22.11.0, появилась возможность указывать собственный фильтр для отбора ссылок. Используется он точно так же, как и другие фильтры для компонентов в Битриксе: сначала объявить глобальный массив с каким-то именем, а затем в настройках компонента (поле «Дополнительный фильтр») лишь указать имя массива. Приведём несколько примеров фильтров (ссылки хранятся в таблице wd_seo_url, и для выборки используется Битрикс-механизм ORM, поэтому фильтр стандартный для таких случаев).
Отобрать только заданные ссылки (указывается массив числовых идентификаторов ссылок):
$GLOBALS['LINKS_FILTER'] = [
'ID' => [35, 36, 37],
];
Отобрать только ссылки, доступные для выгрузки в карту сайта
$GLOBALS['LINKS_FILTER'] = [
'=SEO_HIDE_FROM_SITEMAP' => 'N',
];
Отобрать ссылки только начинающиеся с /catalog/ и с сортировкой 200:
$GLOBALS['LINKS_FILTER'] = [
'URL_REAL' => '/catalog/%',
'SORT' => '200',
];
Отобрать ссылки, не начинающиеся с /catalog/:
$GLOBALS['LINKS_FILTER'] = [
'!URL_REAL' => '/catalog/%',
];
Чтобы лучше понять для чего нужен фильтр, уточним, что ссылки всегда выводятся по каким-то условиям - в зависимости от режима. Модуль анализирует режим, а также все заданные дополнительные параметры, и составляет массив фильтра для отбора ссылок, которые будут выведены. А дополнительным фильтром Вы можете уточнить условия отбора. Таким образом, дополнительный фильтр позволяет повысить качество отбора ссылок перелинковки. Но всё же в большинстве случаев он не пригодится.
Параметр «Разделы для показа» советуем на начальном этапе настроек не использовать, т.к. это усложняет настройку. Он задаёт, в каких разделах должны показываться ссылки из данного правила. Но, при некоторых комбинациях настроек он может привести к неожиданным (на первый взгляд) последствиям, например, из-за него ссылки могут вообще перестать выводиться.Ссылки перелинковки выводятся компонентом «Перелинковка» (webdebug:seo.links). Просто разместите его в нужном месте шаблона сайта, или шаблоне компонента «Каталог», или в любом другом месте (данный компонент подключает свои стили - поэтому не забывайте, что подключать его в кешируемом компоненте нельзя, т.к. стили не будут работать).
Более подробно о размещении ссылок при перелинковке читайте в разделе «Вопрос-ответ».
Шаблон компонента имеет один встроенный шаблон, однако, при необходимости, Вы можете создать свой шаблон для данного компонента. Структура данных для шаблона простейшая - в $arResult['ITEMS'] поступает массив ссылок для вывода, у каждой ссылки имеются большое количество информации, в том числе: URL_SEO («красивый» URL), URL_REAL (настоящий URL), URL_NAME (название ссылки), SORT (сортировка), SELECTED (равно true у текущей ссылки, если такое разрешено в настройках компонента) и т.д.
Также, при кастомизации шаблона следует не забыть указать атрибуты для некоторых HTML-тегов. Эти атрибуты расширяют функционал ссылок перелинковки. Например, атрибут data-selected позволяет в режиме AJAX-фильтрации автоматически выделять ссылки или снимать выделение с активных ссылок. При этом атрибут data-webdebug-seo-link важно указать (без значения), чтобы дать скриптам модуля понять, что эта ссылка является ссылкой перелинковки. Также могут появиться дополнительные атрибуты - чтобы узнать о них, посмотрите в шаблон .default компонента
Если у Вас остались вопросы - пожалуйста, обращайтесь к нам.
Если Вы установили демо-версию модуля и демонстрационный режим истек, но Вы не успели попробовать модуль в работе, сообщите об этом нам, мы можем повторно включить демо-режим. В общем случае, для сброса демо-режима нужно выполнить следующие указания:
создать рез. копию сайта, хотя бы базы данных,
деинсталлировать модуль (все данные будут удалены!),
стереть данный модуль с сайта (соотв. опция доступна в списке модулей),
выполнить SQL-запрос (в админке на соотв. странице в разделе "Инструменты": Административный раздел - Настройки - Инструменты - SQL-запрос):
DELETE FROM `b_option` WHERE `MODULE_ID`='webdebug.seo';
сбросить весь кеш на сайте,
сообщить нам адрес сайта и владельца лицензии для проверки и сброса срока демо-версии на Вашем сайте,
после нашего ответа повторно установить модуль из Маркетплейс .
Ни один из наших модулей не имеет никаких ограничений или изменения условий работы в демо-режиме (за исключением механизма сохранения профилей в Антирутине).
Другими словами, никакие проблемы не могут быть связаны с демо-режимом.
Данная проблема возникает обычно в тех случаях, когда модуль ранее уже устанавливался на данном сайте (либо на копии сайта с той же лицензией), повторно установить не позволяет Битрикс.
При этом даже если на сайт впервые установить данный модуль в демо-режиме, и сразу удалить - то повторная установка будет невозможной.
В таком случае выполните все шаги, описанные в пункте «Как продлить DEMO» (если модуля на сайте нет, пункты 2 и 3 пропустить), либо напишите нам, мы поможем установить.
Да, конечно, это одна из важнейших функций модуля, которая закладывалась с самого начала, поэтому модуль имеет полную поддержку многосайтовости.
Все настройки модуля выполняются отдельно для каждого сайта. Кроме того, все функции модуля привязаны к определённому сайту.
Поэтому, на каждом сайте в рамках одной системы можно настроить совершенно разную работу модуля.
Основная задача, которую решает модуль «SEO-мастер» - задача уникальных тегов для разных страниц умного фильтра. Это - самый простой и доступный способ значительно увеличить число страниц с качественными SEO-данными для продвижения.
Например, Вы можете сгенерировать для продвижения страницы «Велосипеды горные» и «Велосипеды дорожные» - и так для любых свойств и значений фильтра. Более сложный пример страниц, которые может сгенерировать модуль: «Ноутбуки диагональ 15.6 с подсветкой клавиатуры» - здесь представлена комбинация двух параметров - диагональ и наличие подсветки клавиатуры.
Для генерации ссылок Вы можете использовать фильтр по цене, и для товаров с ценой, например, менее 1000 рублей дополнять тексты фразой «недорогие».
Кроме SEO для фильтра, модуль позволяет легко управлять редиректами по https (редирект на https://) и www (убрать или добавить www из домена). Кроме того, он может убирать index.php из адреса, добавлять слеш в конце адреса.
Также, модуль добавляет такие уникальные функции как избавление от некрасивых адресов постраничной навигации вида ?PAGEN_1=2 (с заменой на более красивые варианты, например: /page-2/ или ?page=2) и закрытием внешних ссылок от индексации (возможен, например, вариант с предупреждением: "Вы уверены, что хотите перейти по внешней ссылке?").
Возможности модуля уже сейчас очень широкие, а в скором времени они будут ещё значительно расширены, планируем добавлять различные функции, необходимые клиентам.
Да, модуль корректно работает на версиях PHP 8.0 и 8.1.
Установка модуля «SEO-мастер» не активирует функционал модуля, все функции требуют индивидуальной настройки. Важно учесть, что все функции включаются только при необходимости: ни одна из функций не является обязательной (за исключением настройки https - это необходимо для того, чтобы получаемые ссылки были с https вместо http).
Опишем общий алгоритм настройки модуля после установки.
Если модуль успешно отработал и для текущей страницы нашёл подходящую ссылку, то данные по ссылке уже определены и их можно получить несколькими способами.
Приведём пример вывода данных для заголовка H1 четырьмя способами:
global $wdSeoUrlData; print $wdSeoUrlData['SEO_PAGE_TITLE'];
print $GLOBALS['WD_SEO_URL_DATA']['SEO_PAGE_TITLE'];
print \WD\Seo\Page::getCurrentUrlData()['SEO_PAGE_TITLE'];
print $APPLICATION->wdSeoUrlData['SEO_PAGE_TITLE']; # Этот способ уже не рекомендуется, т.к. DEPRECATED
Все способы используют один и тот же заранее подготовленный набор данных, поэтому различий между ними нет.
Массив данных содержит, в числе прочего, следующие данные:
При этом, если в настройках модуля заданы собственные коды для свойств, то вместо SEO_TEXT_1 и SEO_TEXT_1_TYPE будут другие коды. Например, если задать для первого описания код DESCRIPTION_MAIN, то данные для него будут поступать как DESCRIPTION_MAIN и DESCRIPTION_MAIN.
Проверить, какие данные из ссылки доступны на странице, можно распечатав весь массив в соответствии с вышеуказанными способами, например:
print '<pre>'; print_r($APPLICATION->wdSeoUrlData); print '</pre>';
Пример вывода на сайте:
if(mb_strlen($APPLICATION->wdSeoUrlData['DESCRIPTION_BOTTOM'])){ ?> <div class="wd_seo_description_bottom"> <?=$APPLICATION->wdSeoUrlData['DESCRIPTION_BOTTOM'];?>
</div> <? }
Кроме того, дополнительные описания можно вывести на сайте с помощью HTML-комментариев (проверьте, что галочка для использования этого функционала включена в настройках модуля), например:
<!--DESCRIPTION_BOTTOM-->
В модуле реализован механизм управления ссылками, при котором для каждой ссылки задаётся два адреса - реальный («старый», «некрасивый») и желаемый («новый», «красивый»). Желаемый адрес часто называют ЧПУ («человеко-понятным урлом»).
При открытии публичной части сайта модуль берёт текущий адрес, по нему ищет соответствие (одновременно по реальному и желаемому адресам) - и если есть соответствие, то выполняет необходимые действия:
если текущий адрес является реальным для одной из ссылок, модуль выполняет редирект (код 301) на желаемый адрес,
если же текущий адрес является желаемым, то модуль подставляет из ссылки необходимые SEO-данные и показывает страницу, указанную в реальном адресе (для этого используются правила обработки адресов Битрикс - т.е. модуль определяет целевую страницу, для неё определяет необходимое правило обработки и, если оно найдено, подключает скрипт из этого правила).
Данный механизм выгодно отличает наш модуль среди аналогов, т.к. позволяет заранее точно понимать, какие ссылки будет обрабатывать модуль, какие конкретно SEO-данные для них он установит и т.д. Кроме того, этот механизм обеспечивает отличное быстродействие, не замедляющее работу сайта даже при большом количестве ссылок.
Настройка состоит из нескольких этапов.
Прежде всего необходимо создать профиль настроек.
Профиль - это набор настроек, которые в дальнейшем используются при генерации ссылок. Такая система профилей создана для того, чтобы при дальнейшей настройке не приходилось каждый раз указывать какие-либо дополнительные настройки - всё указывается в одном месте и один раз. Это значительно упрощает настройку и снижает вероятность проблем, связанных с указанием некорректных параметров.
При настройке профиля указываются такие параметры как: активность (влияет на активность ссылок, относящихся к профилю), привязка к сайту, инфоблок, тип умного фильтра, шаблон реальных ссылок (модуль будет считать их реальными адресами), валюта (используется при фильтрации по цене).
Также, профиль может предлагать дополнительные настройки в зависимости от выбранного типа фильтра - например, для умного фильтра без ЧПУ предлагается к настройке имя фильтра (по умолчанию - arrFilter) и имя GET-параметра для указания раздела (по умолчанию - SECTION_ID).
Далее необходимо создать правило генерации ссылок.
Правило описывает один логический набор ссылок. Например, ссылки заданного типа для какого-либо раздела. Генерация ссылок будет доступна после настройки параметров правила.
Настройка правила предлагает указание таких параметров как: активность (как и активность в профиле, влияет на активность ссылок, относящихся к данному правилу), профиль (настройки будут браться из этого профиля), раздел инфоблока (это влияет на список доступных свойств).
После настройки базовых параметров необходимо настроить условия фильтра, заполнить шаблоны SEO-данных, сохранить. После этого доступна генерация ссылок, которая выполняется нажатие кнопки «Сгенерировать».
Кстати, при настройке фильтров учитывайте, что значения показываются только используемые. Другими словами, неиспользуемые в данном разделе значения данного свойства не показываются.
Наконец, необходимо проверить созданные ссылки.
В большинстве случаев достаточно проверить несколько ссылок. Ссылки, относящиеся к правилу, показаны на странице этого правила (вкладка «Страницы»). Открыть конкретную ссылку можно по двойному клику на ней (клик на адрес ссылки открывает данный адрес).Необходимо проверить корректность заполнения SEO-полей по шаблонам, и корректность генерации адресов - реального и желаемого.
После этого необходимо нажать на адрес сгенерированной страницы, чтобы открыть её, и проверить её визуально.
При создании (изменении) ссылки модуль автоматически добавляет (изменяет) информацию в поиске, если у ссылки не отмечена галочка «Запретить добавление в поиск».
Добавление в поиск подразумевает добавление информации о ссылке в индекс модуля «Поиск». В индекс добавляются только значения SEO-полей. Служебное название и описание ссылки в индекс не добавляются.
В данном вопросе необходимо обратить внимание на привязку ссылки к сайту - именно для этого сайта и добавляется индекс, а также на значение опции «Индексировать ссылки от имени модуля инфоблоков» - включение этой опции приводит к тому, что модуль добавляет собственные данные в поиск от имени модуля инфоблоков, что упрощает настройку поиска на сайте.
Также модуль поддерживает переиндексацию поиска, результат которой для каждой ссылки полностью совпадает с результатом обычного добавления этой ссылки в индекс.
Активность ссылки для SEO умного фильтра определяется активностью как самой ссылки, так и родительского правила генерации, так и профилем: ссылка считается активной, если активность указана как для ссылки, так и для правила, так и для профиля одновременно. В противном случае ссылка считается неактивной.
Активность ссылки, не относящейся к SEO умного фильтра определяется только активностью самой ссылки.
Принцип работы SEO умного фильтра в нашем модуле основан на сопоставлении реального и желаемого адресов. Соответственно, для корректной работы модуля необходима корректная генерация реальных адресов умного фильтра. Это выполняется отдельным механизмом модуля по работе с разными типами умного фильтра. Данный механизм основан на системе плагинов, что позволяет добавить в модуль поддержку любого умного фильтра. Штатно модуль поддерживает только стандартный умный фильтр Битрикса в двух вариантах: с ЧПУ и без ЧПУ - тип фильтра выбирается в настройках профиля.
В момент генерации ссылок (в правиле генерации) модуль знает тип фильтра (указан в настройках профиля) и, имея список полей фильтра (указаны в правиле генерации), генерирует для каждой комбинации значений фильтра свой адрес (URL) - этот адрес совпадает с адресом, который генерирует Битрикс при работе умного фильтра в публичной части.
При этом, в фильтре без ЧПУ порядок параметров не всегда соблюдается, соответственно адрес, генерируемый модулем и адрес, генерируемый Битрикс, в некоторых случаях могут немного различаться между собой порядком параметров.
При необходимости, в модуль можно добавить поддержку любого типа фильтра - для этого необходимо создать класс, расширяющий класс \WD\Seo\Filter (примеры - в папке /bitrix/modules/webdebug.seo/plugins/filter) и просто подключить его в событии OnFindPluginsFilterType.
Прежде всего, модуль по адресу текущей страницы определяет целевую ссылку модуля (это происходит на событии onProlog): если она найдена, модуль запоминает полный набор её данных, и в дальнейшем, в момент вызова события OnBeforeEndBufferContent, устанавливает SEO-данные из этой страницы.
В этот момент (событие ) модуль устанавливает:
четыре основных SEO-параметра (title - заголовок окна браузера, description - описание страницы, keywords - ключевые слова, h1 - заголовок страницы),
название страницы в цепочке навигации («хлебные крошки»),
флаг включения или отключения индексации (мета-тег robots),
канонический URL (который совпадает с желаемым адресом из ссылки).
При установке SEO-данных на странице, если какое-либо поле оказывается незаполненным, его установка просто пропускается, т.е. используется значение, которое уже установлено на странице.
Непосредственно перед установкой SEO-данных модуль вызывает событие OnSetPageMeta, которое можно использовать для модификации SEO-данных.
Значения дополнительных текстовых описаний никуда не устанавливаются, только сохраняются, чтобы Вы могли вывести их на сайте там, где это необходимо.
Несмотря на то, что SEO-данные страницы устанавливаются ближе к концу выполнения страницы (событие OnBeforeEndBufferContent близко к самому концу генерации страницы), на сайте также могут существовать обработчики, которые могут переопределять SEO-данные, установленные модулем, из-за чего будет создаваться впечатление что «модуль некорректно работает». В таком случае необходимо либо пересмотреть необходимость данных обработчиков, либо после их выполнения вызвать метод \WD\Seo\Page::setCurrentUrlMeta().
Авто SEO для фильтра это функционал автоматической генерации мета-тегов для страниц фильтра без настройки отдельных правил.
Другими словами, это возможность смены SEO-данные страницы при любом выборе в умном фильтре. Например, в разделе с футболками Вы выбрали для фильтра размер M и красный цвет. В заголовке страницы Вы увидите: «Футболки: размер M, цвет красный».
Шаблон настраивается, множественные значения учитываются, выбранные диапазоны цен и числовых свойств также учитываются. Таким образом, это лёгкий способ решить насущную проблему SEO для умного фильтра одним выстрелом - и всё это настраивается за на несколько минут.
При этом, прежний функционал SEO для умного фильтра не теряет актуальность. Он позволяет настроить более качественные SEO-данные для отдельных разделов или типов страниц: если для страницы сгенерированы собственные данные, авто SEO не действует.
Таким образом, становится ясным наиболее эффективный путь в проработке SEO для умного фильтра: сначала настроить авто SEO, затем для отдельных страниц настраивать более качественные SEO-данные.
Внимание! Требуется установка данного функционала в шаблон фильтра. Самый простой способ - напишите нам, мы оперативно поможем (понадобится доступ к сайту). Либо можете сделать это самостоятельно. Всё что требуется - разместить в шаблоне компонента умного фильтра (bitrix:catalog.smart.filter) следующий код (лучше это сделать в файле component_epilog.php шаблона фильтра):
if(\Bitrix\Main\Loader::includeModule('webdebug.seo')){ \WD\Seo\SmartFilter\AutoSeo::set($arResult, $arParams); }
После этого активируйте функционал в админке: Маркетинг - SEO-мастер - SEO для умного фильтра - Авто SEO для фильтра. И, если требуется, настройке собственные мета-теги.
Если у Вас в каталоге работает AJAX-фильтрация, в настройках главного модуля Вам пригодятся две опции:
Нет, такой возможности нет.
Функционал «SEO для умного фильтра» подразумевает качественную настройку всех ссылок, а в столь массовом режиме высокого качества не добиться. Поэтому, одно правило можно настроить только для одного раздела и одного сочетания выбранных свойств.
Если Вы настроили правило для свойств, например, «Бренд», «Материал», «Тип», то это правило уже невозможно применить для двух свойств, т.к. в нём настроены SEO-тексты вида «товар бренда #PROPERTY_BRAND.VALUE# изготовлен из #PROPERTY_MATERIAL.VALUE# (#PROPERTY_TYPE.VALUE#)» - и при попытке использования этого правила только для свойств «Бренд» и «Тип» в текстах остаётся текс "изготовленные из #PROPERTY_MATERIAL.VALUE#" - соответственно, такой вариант в нашем модуле не возможен.
Поэтому, вывод простой: каждое правило настраивается только для одного раздела и одного сочетания выбранных свойств. Конечно, это предполагает достаточно большую работу по настройке. Но в результате Вы получаете качественные SEO-тексты для каждого случая.
Если же Вам необходимо быстрое решение, используйте функционал «Авто SEO» - он позволяет минимальными усилиями (только установить небольшой код в шаблон фильтра и настроить один раз мета-данные) организовать автоматические SEO-данные на странице при переключении фильтра.
Такая возможность появилась в версии 22.8.0 модуля.
По умолчанию все коды свойств указываются как есть:
В таком случае мы получаем адреса вида /catalog/futbolki/cvet:krasnyi/
Чтобы добиться такой возможности, следует в начале кода свойства добавить символ @ чтобы получилось так:
После этого изменения мы получаем другие адреса: /catalog/futbolki/krasnyi-cvet/
Таким образом, это дополнительно улучшает человекопонятность (читабельность) адресов.
Кроме цвета, это может быть полезно и для других свойств, например, свойство "Количество роз" (количество цветов в букете): удобнее использовать не "roz:7", а "7-roz", и т.д.
Также, имеется возможность отбросить название свойства, и оставить только значение, т.е. сделать не "roz:7" и не "7-roz", а просто "7": /catalog/rosy/7/ - для этого в поле «Код для ссылок» должен быть только символ решётки.
И третий вариант - собственный текст. Для этого значение должно начинаться с символа «!», например: "!krasnyi". Имейте ввиду, что это подходит только если в правиле генерируется одна ссылка, т.к. если их больше, то все ссылки будут иметь одинаковый адрес.
В модуле можно настроить фильтр не только по свойствам, но и по цене, хотя это используется редко.
Для SEO обычно не важно какая цена указана, поэтому сами числовые значения цен лучше не использовать. Но для некоторых категорий можно добавлять цену и устанавливать максимальное значение - напр., для категории "Футболки" можно установить максимальную цену 500 рублей. Т.е. на странице будут показаны товары ценой до 500 рублей. И в SEO-тексте в этом правиле можно дописывать "недорого", "выгодно", и т.п. Или наоборот - задать цену чтобы были отобраны только дорогие, и в SEO-текста дописывать "лучшие", "премиум", "дорогие" и т.п.
Именно так. Если в правиле генерации использовать свойства, не настроенные для фильтра - они сами по себе работать не будут. Т.к. модуль никак не влияет на работу фильтра. Модуль лишь узнаёт какие страницы генерирует фильтр и назначает им мета-данные.
А чтобы работала фильтрация по свойствам, не заданных для умного фильтра, на сайте необходимы сложные доработки.
Модуль имеет собственный механизм заполнения полей с макросами.
Прежде всего, доступны поля, заданные в фильтре - это могут быть цены и свойства товаров и предложений. Для цен доступны поля «От» и «До». Для свойств - простые значения. Это всё то, что заполняется из фильтра.
Например, мы создаём правило генерации по одному свойству - материалу. В заголовке указываем шаблон с макросом: «Сумки #PROPERTY_MATERIAL.VALUE#», после генерации получаем несколько ссылок, в которых подставленное значение соответствует выбору в фильтре для данной ссылки.
Учитывая, что ссылки относятся к разделам, правило генерации настраивается в контексте раздела, поэтому и при редактировании SEO-полей всё основано на текущем разделе. Т.е. все поля так или иначе привязаны к разделам, например «Поля раздела», «Свойства раздела», «SEO-поля раздела».
Также, нам всегда известен инфоблок, поэтому группы полей включают «Поля инфоблока».
Кроме этого, модуль добавляет некоторые дополнительные поля, например, минимальную и максимальную цену товаров в разделе по каждому из типов цен, а также число товаров в текущем разделе.
Использовать функции необязательно. Но они помогают «навести красоту».
Приведём только один пример. Допустим, у нас есть сайт доставки еды. Есть раздел "Пицца", и в нём настроен фильтр по ингредиентам.
Например, мы настроили правило для этих условий. Получили заголовок (в зависимости от настроек) вида "Пицца с Креветка". Такой вариант нам не очень нравится. Теперь займёмся наведением красоты.
Сначала свойство из состава приведём к нижнему регистру, для этого используем функцию модуля - toLower:
Пицца с ({=toLower(#PROPERTY_INGREDIENTS.VALUE#)}
Получаем "Пицца с креветка", всё равно плохо.
Теперь добавим обработку функцией склонения в творительный падеж (буква означает падеж) функцией morphyPhrase или morphyWord:
Пицца с {=morphyPhrase({=toLower(#PROPERTY_INGREDIENTS.VALUE#)}, "Т")}
Получаем "Пицца с креветкой" - это уже хорошо.
Можно пойти ещё дальше, если вместо "Пицца с креветкой" нужно "Пицца с креветками":
Пицца с {=morphyPhrase({=toLower(#PROPERTY_INGREDIENTS.VALUE#)}, "Т", true)}
И таким образом можно генерируемые SEO-тексты делать более качественными.
При этом, в модуле имеется достаточно много функций, но самое главное - можно использовать вообще любые PHP-функции, например:
{=php:my_function(12404324)}
или
{=php:\MyModule\MyClass::formatSize(12404324)}
При этом модуль позволяет автоматически подключать соответствующие классы, если необходимо.
При заполнении текстовые SEO-полей («Заголовок окна браузера», «Ключевые слова страницы», «Описание страницы» и др) справа от поля доступна кнопка с тремя точками, нажатие по которой открываем меню макросов. Обратите внимание на нижний пункт - «Примеры функций».
В отличие от всех других модулей наш модуль устроен так, что при заполнении полей может использовать любые функции. Соответственно, синтаксис полей полностью отличается от любых других аналогичных модулей.
Все функции разделены на две группы: функции модуля (функции, реализованные в модуле) и PHP-функции (функции прямо из PHP и Битрикс, с префиксом «php:»). В качестве обучение разберём несколько примеров функций:
Да, модуль допускает ручное добавление произвольной ссылки. В этом случае требуется указать только реальный и желаемые адреса, а также SEO-данные и настройки индексации, добавления в поиск и в карту сайта.
Это легко сделать так: зайдите на нужную страницу, нажмите кнопку «SEO-мастер» на панели кнопок, отредактируйте данные (также можете указать новый адрес для этой страницы), и сохраните. Дополнительных действий не требуется.
Блокировка ссылки это механизм защиты ссылки от дальнейших автоматических изменений генератором ссылок (вручную ссылки можно изменять всегда!). Для произвольных ссылок (созданных вручную) флаг блокировки также присутствует, но на данный момент не имеет никакого смысла, и никак не учитывается.
Это может быть полезно для случаев, когда после первичной настройки и заполнения SEO-данных необходимо защитить сделанные изменения от случайной их потери при следующей генерации ссылок. Если Вы не используете ручное редактирование данных в сгенерированных ссылках, блокировку лучше отключить, чтобы это не вызывало путаницы.
Приведём пример. Вы создали правило генерации, сгенерировали сотню ссылок. В дальнейшем, некоторые из них Вы редактировали, придавая SEO-данным более подходящий вид. Если оставить всё как есть, то следующее нажатие кнопки генерации ссылок приведёт к потере всех сделанных изменений. А если такую ссылку заблокировать, то она защищена от изменений.
Блокировка работает только для ссылок, создаваемых функционалом SEO умного фильтра. Поэтому для ссылок, добавленных вручную, блокировка не имеет смысла.
Блокировка настраивается отдельно для каждого сайта, в настройках модуля (группа настроек «SEO для умного фильтра», параметр «Режим блокировки ссылок от изменения»). Доступны следующие варианты:
Несмотря на то, что указанные параметры («В индексе», «В поиске», «В карте сайта») находятся визуально рядом, эти опции совершенно разные и друг с другом никак не связаны.
Эта опция подразумевает разрешение или запрет страницы для индексации мета-тегом robots. При разрешении индексации значение равно index, follow. При запрете значение равно noindex, nofollow.
Данная опция срабатывает в момент открытия страницы каждым пользователем.
Добавление в поиск подразумевает добавление данных из ссылки в индекс поискового модуля. Таким образом, введя на сайте в поисковой строке текст из ссылки, пользователь должен увидеть эту ссылку в результатах поиска.
Опция срабатывает в момент её изменения, мгновенно добавляя или удаляя данные из поиска.
Важный нюанс! Модуль добавляет данные в поиск стандартным способом, в т.ч. с указанием привязки к сайту, поэтому в общем случае поиск должен всегда работать как ожидается. Однако на многих сайтах поиск сделан в два этапа: на первом этапе отбираются подходящие записи из поискового индекса, а на втором этапе эти записи выводятся в каталоге - в этом случае ссылки нашего модуля не будут выведены, т.к. показ результатов поиска в каталоге подразумевает поиск только по товарам сайта. Остальные сущности (страницы, новости, статьи и т.д.) в таком случае в поиске не участвуют.
Добавление в карту сайта подразумевает создание отдельного файла карты сайта (или нескольких таких файлов) для ссылок нашего модуля. Т.е. при создании карты сайта Битрикс наш модуль автоматически срабатывает и дополняет созданную карту сайта собственными данными.
В результате работы создаётся один (или несколько) файлов карты сайта, со ссылками модуля, а также в общий файл карты сайта (sitemap.xml или sitemap_index.xml) помещается ссылка на созданный файл (если файлов несколько - помещаются ссылки на все файлы).
Модуль поддерживает работу обоих штатных механизмов формирования карты сайта - старый (через «Поиск») и новый (через «Маркетинг»). Таким образом, когда Вы запускаете карту сайта, создаётся штатная карта сайта Битрикс, и в момент окончания её генерации начинает работу наш модуль.
Соответственно, опция добавления в карту сайта срабатывает на этапе генерации карты сайта.
Внимание! Несмотря на кажущуюся простоту, вывод кнопок перелинковки - самая сложная задача в модуле. Всё дело в том, что ссылки, условно, хранятся единым списком, а компонент перелинковки накладывает различные условия на их отбор для вывода. Причём нюансов отбора очень много, и многие из них сложны для понимания. Различные режимы выбора ссылок задают совершенно разные условия для их отбора. В связи с этим, рекомендуем сначала детально изучить работу с правилами и со ссылками, и только затем настраивать вывод кнопок перелинковки.
Модуль содержит компонент webdebug.seo:links (до версии 23.2.0 - webdebug:seo.links), который выводит список ссылок для перелинковки.
Обратите внимание! Это именно перелинковка модуля, т.е. ссылки с одних ссылок модуля на другие. Конечно, можно настроить и в режимах, позволяющим не привязывать отбор ссылок к текущему правилу или профилю (напр., можно настроить, чтобы в разделах выводились ссылки, привязанные к этим разделам), но возможности для этого не самые широкие.
Важно! Компонент не позволяет работать в режиме «здесь выводим вот эти ссылки, вон так выводим вон те ссылки», т.е. обычно используют один компонент, поэтому на весь каталог должна быть единая логика. Поэтому советуем выбирать один из простых и понятных режимов (напр., в режиме «Раздел»), и его донастраивать. Режим «По умолчанию» далеко не во всех случаях является наиболее подходящим.
Пример подключения компонента (режим - «Раздел»):
<?$APPLICATION->IncludeComponent( "webdebug.seo:links", ".default", array( "COMPONENT_TEMPLATE" => ".default", "AJAX_PREVENT" => "Y", "ALLOW_CURRENT" => "Y", "COUNT" => "100", "DISPLAY_COUNT" => "N", "HIDE_EMPTY" => "Y", "JUST" => "N", "MODE" => "SECTION", "SELECTED_FIRST" => "Y", "SORT_FIELD_1" => "ID", "SORT_FIELD_2" => "ID", "SORT_ORDER_1" => "ASC", "SORT_ORDER_2" => "ASC", "RULE_ID" => "", "FILTER_NAME" => "", "LINK_SECTION" => "N", "SECTION_ID" => $arResult["VARIABLES"]["SECTION_ID"], "JUST_FILTER_LINKS" => "N", "URL_GROUP" => "N", "COLLAPSE" => "Y", "COMPOSITE_FRAME_MODE" => "A", "COMPOSITE_FRAME_TYPE" => "AUTO" ), false );?>
Компонент имеет достаточно широкие возможности вывода ссылок.
Основное, что следует иметь в виду - все (без исключений) SEO-ссылки модуля хранятся в одной таблице в виде одного общего списка, задача данного компонента - вывести эти ссылки, используя фильтр. А Ваша задача - всего лишь правильно настроить этот фильтр (учитывая профиль, раздел, правило - в зависимости от поставленной задачи), т.е. выбрать один из предоставленных режимов получения ссылок.
Поэтому, почти каждая опция в настройках компонента перелинковки либо смягчает, либо ужесточает требования к отбору ссылок, причём некоторые опции в некоторых случаях могут привести к тому, что ссылки не будет выведены вообще. Не изменяйте опции, назначение которых Вы не понимаете.
Режим (параметр «Источник ссылок», MODE) определяет, откуда модулю следует выбрать ссылки для вывода. Режим «По умолчанию» подразумевает использование ссылок из связанных (по полю «Перелинковка») правил, а если правила не привязаны - из текущего правила.
Текущее правило определяется двумя способами: его можно явно указать в настройках компонента (параметр «ID правила», RULE_ID), а если оно не указано, то определяется из текущей ссылки (если текущая страница является страницей, сгенерированной модулем).
Опция «Работа только при найденной ссылке» позволяет остановить работу компонента вывода ссылок, если текущая странице не является страницей, сгенерированной модулем.
Также доступен параметр DEBUG, если в него передать Y, в $arResult будет добавлен массив запроса для получения ссылки. Этот же массив будет выведен в скрытом <div> (только для администраторов).
Дополнение от 16.06.2021
Обновление 21.5.0 добавляет возможность привязки ссылок правила при перелинковке к определённым разделам. В связи с этим в компонент можно передавать следующие параметры:Дополнение от 19.06.2021
Обновление 21.6.0 добавляет новые параметры компонента для поддержки учёта родительских разделов:Учёт родительских разделов работает по следующему принципу: для текущего раздела (LINK_SECTION_ID) модуль может определяет всех родителей (как раз для этого используется LINK_SECTION_IBLOCK_ID) и отбирает те ссылки, в правиле которых указан или сам раздел, или его родители.
Таким образом, если у Вас есть, например, раздел «Обувь», в котором 10 других подразделов - вместо того чтобы отмечать все 10 подразделов, достаточно один раз отметить раздел «Обувь».
Прежде всего, речь пойдёт о компоненте webdebug:seo.links, если он у Вас ещё не установлен - пожалуйста, установите. Дальнейшее описание касается настроек данного компонента.
Прежде всего убедитесь, что для ссылок сгенерированы названия - ведь именно они и выводятся в виде тегов.
Для начала необходимо определиться с режимом вывода ссылок (параметр «Источник ссылок»). Доступны следующие варианты.
Соответственно, если вывод ссылок не работает, одной из причин может стать неверно указанный параметр «Источник ссылок». При этом, если идентификаторы раздела (профиля, правила) указаны в подключении компонента - проверьте указанные параметры.
Также, не забудьте проверить наличие активных ссылок по заданному режиму выборки. Помните, что ссылка считается активной если также активно его родительское правило, а также профиль этого правила.
Наконец, проверьте остальные параметры компонента, которые могут влиять на выборку ссылок:
Кроме того, есть нюанс при использовании в правилах перелинковки поля «Разделы для показа» - если Вы хотите чтобы ссылки показывались на страницах всех разделов (даже для тех, которых не создано ни одного правила), то следует использовать режим «Произвольный», т.к. остальные режимы предполагают работу при найденном или заданном правиле, т.е. предполагают что с открытым разделом ассоциирована о какое-либо правило перелинковки. Также, в этом случае может потребоваться отметить галочку «Строгий режим раздела перелинковки», иначе ссылки будут выведены также на всех дочерних разделах.
Приведённые макросы - #Z_PRODUCTS_COUNT.VALUE#, #Z_PRICE_1_MIN.VALUE# - #Z_PRICE_1_MAX.VALUE# - это «умные» поля, которые в момент генерации ссылок не заменяются и остаются как есть, а заменяются в момент вывода на странице, т.е. эта замена срабатывает на каждом хите. Соответственно, данные в этих полях всегда актуальны, в отличие от сгенерированных заранее данных. Например, поле #X_PRODUCTS_COUNT.VALUE# - оно определяет количество товаров в разделе в момент генерации, а если после генерации в раздел добавились новые товары - число товаров останется старым до очередной генерации.
«Умные» поля не поддерживаются в перелинковке, т.к. перелинковка всего лишь выполняет отбор ссылок, без дополнительных преобразований макросов в них.
Кроме того, «умные» поля рассчитаны на одиночное выполнение на странице, поэтому если бы в компоненте перелинковки и была поддержка «умных» полей, это была бы огромная нагрузка на сервер, особенно на больших каталогах: т.к. по каждой ссылке приходилось бы сначала запросом определять набор условий для фильтра, а следующим (очень тяжёлым!) запросом - проверять количество товаров по этому фильтру.
Поэтому, «умные» поля работают только на странице конкретной ссылки. Поэтому, использовать такие макросы в поле «Название ссылки» нельзя.
Параметр «Разделы для показа» управляет тем, в каких разделах могут быть показаны ссылки из данного правила в перелинковке.
Самое главное что нужно всегда помнить - это дополнение к остальным параметрам, оно может лишь ещё более уменьшить отбор ссылок. Т.е. если у Вас перелинковка сейчас ничего не выводит, то этот параметр не сможет решить проблему. А вот если перелинковка исправно выводит ссылки, то данный параметр может привести к тому, что ссылки не будут выводиться - всё зависит от правильной настройки.
Вся идея данной опции очень проста: она позволяет вывести ссылки с привязкой к выбранным разделам. Например, если Вы создали правило генерации ссылок, и знаете, что ссылки из него должны показываться только в каком-то одном (или двух) разделах, то данная опция Вам поможет.
Как пользоваться?
Важно понимать, что если Вы выбрали разделы в данном параметре - это ещё даже не полдела, никаких изменений не увидите. Необходимо в настройках компонента перелинковки заполнить необходимые параметры.
#COMPONENT_PARAMETERS #
Отмечаем галочку «Учитывать выбранные разделы перелинковки в правилах»,
В поле «ID инфоблока для раздела перелинковки» указывает ID инфоблока, в котором модуль будет искать нужный раздел (ниже опишем подробно),
Указываем основной параметр - «ID раздела перелинковки» - здесь должен быть указан раздел, относительно которого будет проверяться привязки. Т.е. если Вы в правиле (в параметре «Разделы для показа») выбрали раздел «Телевизоры», и хотите, чтобы ссылки выводились, значит здесь должен быть указан ID раздела «Телевизоры».
Важно! Конечно, указывать ID раздела в визуальном режиме - это неправильно, потому что в реальных условиях ID раздела почти во всех случаях - это текущий показываемый раздел сайта. Поэтому, ID раздела нужно указывать в коде подключения. Например, так (этот код на Вашем сайте может не работать, т.к. ID раздела может быть не в $arCurSection["ID"]):
<?$APPLICATION->IncludeComponent("webdebug:seo.links", "", Array(
"LINK_SECTION" => "Y",
"LINK_SECTION_IBLOCK_ID" => $arParams["IBLOCK_ID"],
"LINK_SECTION_ID" => $arCurSection["ID"],
);?>
В таком случае визуально эти параметры будут отображаться в настройках компонента таким образом:
Чего мы добились?
Указанными настройками мы включили функционал по привязанным разделам. И теперь будут показываться только те ссылки, в правилах у которых выбран данный раздел.
Например, мы создали правило генерации ссылок для раздела «Мониторы», в нём будут генерироваться ссылки по брендам (например, мониторы Samsung, мониторы LG и т.д.). И мы хотим, чтобы эти ссылки показывались только в разделе с компьютерами (системными блоками), чтобы пользователи после выбора компьютера перешли к выбору монитора. Тогда мы в правиле отмечаем раздел «Системные блоки». Если указанные выше настройки сделаны, то эти ссылки мы будем видеть только в разделе «Системные блоки».
Строгий режим раздела перелинковки
Опция «Строгий режим раздела перелинковки» позволяет не использовать ссылки из правил, в которых разделы не привязаны. Т.е. если в правиле генерации не заполнено поле «Разделы для показа», то при включённом строгом режиме ссылки этого правила вообще нигде не будут выводиться.
Т.е. в таком случае действует логика «выводим только там, где мы выбрали»
Учитывать родительские разделы
Параметр «Учитывать родительские разделы» позволяет вывести в текущем разделе ссылки из правил, в которых выбран не только текущий раздел, но и его родительские разделы.
Например, у нас в каталоге есть раздел «Бытовая техника» - «Телевизоры». В правиле генерации мы выбрали привязку перелинковки к разделу «Бытовая техника».
Теперь, находясь в разделе «Бытовая техника» мы видим ссылки из данного правила, а при переходе в раздел «Телевизоры» не видим их.
Включаем опцию «Учитывать родительские разделы», и видим, что ссылки теперь показываются. Это работает так: модуль видит, что задан раздел «Телевизоры» (мы в нём находимся и его ID передан в параметр LINK_SECTION_ID), модуль определяет все его родительские разделы, и теперь ищет ссылки правил, в привязках которых есть хотя бы один из двух разделов - «Бытовая техника» или «Телевизоры».
Пара примеров:
Группировка ссылок доступна с версии 22.16.0.
Общий принцип заключается в том, что в правилах перелинковки добавлено три новых поля, указывающих группу при выводе - название группы, код и сортировка, и по этим полям компонент перелинковки выполняет группировку ссылок. В отдельных ссылках указать группу нет возможности.
Таким образом, для упрощения можно считать, что выполняется группировка правил, а не ссылок. При этом, фактически группировка выполняется для ссылок.
Всё, что требуется для использования группировки - в правилах прописать названия и коды групп (названия и код - произвольные значения; код группы является обязательным, при отсутствии кода ссылки из правила считаются несгруппированными), и в настройках компонента отметить галочку «Группировать ссылки». Перегенерация не требуется. При этом, должен использоваться обновлённый шаблон (шаблон из модуля ниже версии 22.16.0 не будет поддерживать группировку - поэтому, если Вы кастомизировали шаблон, группировка не будет работать).
Ссылки без группы будут выведены в последнюю очередь, без заголовка.
Нет. Не поможем.
Дело в том, что нам для настройки необходимо знать в подробностях то, как следует настроить. Эти подробности можете знать только Вы. А если Вы их знаете - значит, Вы и самостоятельно можете настроить. Т.к. настройка - это просто настройка общих параметров, выбор нужного режима, настройка дополнительных параметров для выбранного режима.
Поэтому, настраивать Вам придётся самостоятельно, предварительно изучив режимы выбора ссылок и параметры для режимов.
При этом на все возникающие вопросы с удовольствием ответим.
Наш модуль умеет выполнять два вида редиректов:
Для настройки перейдите в раздел «SEO - мастер» - «Сайты», и для нужного сайта выполните требуемое действие. Это можно сделать двумя способами:
Перейдите на страницу «SEO - мастер» - «Редиректы». Нажмите кнопку «Добавить редирект». В форме укажите три обязательных поля:
/catalog/?SECTION_CODE=futbolki
/catalog/futbolki/
Вы можете указать тип редиректа, однако в SEO всегда применяется только редирект с кодом 301.
Также, Вы можете отметить опцию «Использовать RegExp» - это активирует другой режим работы редиректа, при котором Вы можете использовать регулярные выражения. Это может быть полезно, когда у Вас для какого-то случая множество страниц, но редиректы можно объединить по какому-то алгоритму перестановки в строке. Например, у Вас были адреса вида
/catalog/?SECTION_CODE=kurtki
а после модернизации сайта адреса стали вида
/catalog/kurtki/
В таком случае вместо того, чтобы добавлять десятки и сотни редиректов для всех разделов, достаточно будет добавить один редирект с регулярным выражением. В поле «Старый адрес» укажите
^/catalog/\?SECTION_CODE=(\w+)$
а в поле «Новый адрес» так:
/catalog/$1/
И после такой замены, например, будут работать все такие редиректы:
/catalog/?SECTION_CODE=futbolki => /catalog/futbolki/
/catalog/?SECTION_CODE=botinki =? /catalog/botinki/
и т.д.
Для использования регулярных выражений в редиректе, отметьте опцию «Использовать RegExp» - это активирует другой режим работы редиректа, при котором Вы можете использовать регулярные выражения. Это может быть полезно, когда у Вас для какого-то случая множество страниц, но редиректы можно объединить по какому-то алгоритму перестановки в строке. Например, у Вас были адреса вида
/catalog/?SECTION_CODE=kurtki
а после модернизации сайта адреса стали вида
/catalog/kurtki/
В таком случае вместо того, чтобы добавлять десятки и сотни редиректов для всех разделов, достаточно будет добавить один редирект с регулярным выражением. В поле «Старый адрес» укажите
^/catalog/\?SECTION_CODE=(\w+)$
а в поле «Новый адрес» так:
/catalog/$1/
И после такой замены, например, будут работать все такие редиректы:
/catalog/?SECTION_CODE=futbolki => /catalog/futbolki/
/catalog/?SECTION_CODE=botinki =? /catalog/botinki/
и т.д.
Общий принцип работы с каноническими адресами в нашем модуле следующий:
Задать канонические адреса для страницы можно по-разному.
Стандартный способ 1С-Битрикс, не относящийся к нашему SEO-модулю:
$APPLICATION->setPageProperty('canonical', 'ссылка');
Установка через модуль (модуль должен быть подключен):
\WD\Seo\Canonical::setCustomCanonical('ссылка');
При этом метод setCustomCanonical в качестве второго параметра принимает флаг приоритета - true или false. Флаг true означает повышенный приоритет. Модуль в течение выполнения всей страницы собирает запросы через указанный метод, и после этого задаёт странице последний заданный канонический адрес.
Таким образом на странице может работать несколько вызовов, например, на странице сначала задаётся канонический адрес из фильтра (с приоритетом), при условии что он применён, а далее - из списка товара (без приоритета), таким образом canonical будет установлен из фильтра.
Пример установки из списка товаров:
if(\Bitrix\Main\Loader::includeModule("webdebug.seo")){ \WD\Seo\Canonical::setCanonicalForSection(SITE_ID, $arParams["IBLOCK_ID"], $arResult["ID"]); }Пример установки из карточки товара:
if(\Bitrix\Main\Loader::includeModule("webdebug.seo")){ \WD\Seo\Canonical::setCanonicalForElement(SITE_ID, $arParams["IBLOCK_ID"], $arResult["ID"]); }
Пример установки канонического адреса из фильтра:
if(\Bitrix\Main\Loader::includeModule('webdebug.seo')){ if(strpos($arResult['FILTER_URL'], '/filter/clear/apply/') === false){ \WD\Seo\Canonical::setCustomCanonical($arResult['FILTER_URL'], true); } }Опция «Разрешить установку через php-код» влияет только на метод setCustomCanonical().
Прежде всего напомним, что в Битриксе канонические адреса всегда должны задаваться таким способом:
$APPLICATION->setPageProperty("canonical", "ссылка");
На теги canonical, добавленные вручную, модуль не смотрит совершенно, для модуля эти теги не существуют.
Далее, важно отметить, что канонические адреса модуль устанавливает на событии onBeforeEndBufferContent, т.е. практически в конце выполнения страницы.
Если на странице был задан другой канонический адрес стандартным способом, он будет перезаписан.
Задать канонический адрес для вывода можно методом
\WD\Seo\Canonical::setCustomCanonical("ссылка");
При этом данный метод вторым аргументом может принимать приоритет - true или false.
Общая схема работы с данным модулем следующая: на странице можно сколько угодно раз выполнить данный метод, и конечным результатом будет последний выполненный (если использовался приоритет - то последний выполненный с приоритетом). И в конце выполнения страницы подготовленный канонический адрес будет выведен в тег canonical.
Общий принцип автоматических канонических адресов предельно прост: модуль при открытии конкретной страницы поисковиком или пользователем удаляет из адреса все GET-параметры кроме важных (задаются в настройках модуля), и получившийся адрес ставит в качестве канонического.
В результате, если в адресе указаны какие-либо лишние параметры (а это бывает очень часто и это совершенно нормально), то модуль сообщает поисковикам правильный адрес, без учёта этих параметров.
Таким образом, предотвращается появление дубликатов страниц, вызванных наличием в адресе различных GET-параметров - это одна из наиболее частых причин появления дубликатов. При этом, нужно понимать что вопрос дубликатов - очень сложный, и существует множество других причин их появления, каждая из которых имеет свои решения.
При генерации собственных страниц SEO для умного фильтра может возникнуть необходимость не индексировать страницы, содержащие, к примеру, /filter/property-is-value/apply/.
Кроме того, даже без настройки SEO для умного фильтра может возникнуть желание убрать из поиска страницы вида /filter/clear/apply/ (эти страницы появляются при нажатии кнопки сброса фильтра).
Модуль позволяет для таких страниц добавить канонический адрес, указывающий на основной раздел, для этого перейдите на страницу «Канонические адреса», и добавьте новый канонический адрес:
Реальный адрес: /filter/.*?/apply/
Канонический адрес: /
Использовать RegExp: да
Здесь в каноническом адресе указан просто слеш, но это не означает главную страницу сайта, т.к. здесь используется регулярное выражение. Т.е. всё что находит регулярное выражение, заменяется на один слеш.
В случае, если необходимо убрать только /filter/clear/apply/ в поле «Реальный адрес» укажите /filter/clear/apply/.
Все SEO-ссылки модуля (и сгенерированные SEO для умного фильтра, и добавленные вручную) прописывают canonical сами на себя, т.к. эти ссылки создаются для продвижения, и указывать с них канонические адреса на какие-либо другие страницы - неправильно.
Модуль, начиная с версии 22.6.0 (от 21.04.2022) добавляет ЧПУ для постраничной навигации! Данный функционал работает автоматически, настраивать htaccess и urlrewrite не требуется!
Теперь вместо некрасивых адресов вида /catalog/section/?PAGEN_1=2 вы можете настроить практически любой вариант, который Вам необходим, например, /catalog/section/page2/.
Возможен даже вариант /catalog/section/2/, но только если на Вашем сайте не используются адреса, в которых на конце таким же образом могут фигурировать числа (в противном случае такие страницы не будут работать, т.к. модуль будет считать их постраничной навигацией).
Модуль позволяет выбрать один из трёх режимов и донастроить его под собственные требования. Настроек достаточно много. При этом, если каких-то настроек недостаточно - пишите нам, добавим.
Примеры вариантов настроек в зависимости от режима:
Важную роль играет правильно указанный параметр «Имя параметра PAGEN». В нём нельзя просто указать, например "page-2", т.к. 2 - это только частный случай, а если страница будет 3? Номер страницы заменяется на символ "@", поэтому указывать нужно так: page-2 - тогда модуль правильно поймёт как сгенерировать название параметра для нужной страницы.
На данный момент модуль работает в тестовом режиме (бета-версия), на некоторых сайтах могут быть проблемы в работе данного функционала, особенно при использовании нестандартной постраничной навигации.
Также, важный нюанс: все страницы должны работать только через первый индекс постраничной навигации (т.е. PAGEN_1, но не PAGEN_2). На самом деле, индексы выше единицы встречаются сейчас только на сайтах, где что-то некорректно работает. Т.е. если на Вашем сайте иногда появляется PAGEN_2, PAGEN_3, значит где-то имеются проблемы, и их необходимо решать.
Также, важная информация для тех, для кого важно понимать как это работает. Принцип работы заключается в двух аспектах:
Таким образом, данный функционал должен работать для всех случаев, когда используется стандартная постраничная навигация.
В случае, если на Вашем сайте адреса работают со слешем на конце (а это большинство случаев), опция «Оставлять слеш после преобразования» должна быть включена.
По умолчанию в постраничной навигации раздела используются стандартные адреса. Например, если вы в SEO для умного фильтра создали для страницы /catalog/televizory/filter/brand-is-lg/apply/ красивый адрес /catalog/televizory/lg/, то, находясь на странице этого «красивого» адреса, в постраничной навигации Вы продолжите видеть ссылки вида /catalog/televizory/filter/brand-is-lg/apply/?PAGEN_1=2.
Это происходит потому, что модуль для страницы с «красивым» адресом устанавливает реальный адрес, чтобы обеспечить её работоспособность, поэтому и постраничная навигация видит реальный адрес.
Обновление модуля 22.9.3 решает данный вопрос. После обновления всё, что требуется - прописать код перед подключением компонента bitrix:catalog.section (обычно это выполняется в файле section.php или section_vertical.php или section_horizontal.php шаблона компонента bitrix:catalog):
if(\Bitrix\Main\Loader::includeModule('webdebug.seo')){ \WD\Seo\Page::fixCatalogSectionBaseUrl($arParams); }
Внимание! Не забудьте проверить, что в дальнейшем подключении компонента используются параметры PAGER_BASE_LINK_ENABLE и PAGER_BASE_LINK, например так:
"PAGER_BASE_LINK_ENABLE" => $arParams["PAGER_BASE_LINK_ENABLE"], "PAGER_BASE_LINK" => $arParams["PAGER_BASE_LINK"],
Мы понимаем, что для многих клиентов нашего модуля самостоятельно прописать данный код нет возможности, поэтому в случае необходимости - напишите нам, мы поможем с этим вопросом.
Данная проблема связана, скорее всего, с тем, что для постраничной навигации у Вас используется не PAGEN_1, а, например, PAGEN_2 или PAGEN_3.
Такое происходит, если на странице до размещения основного компонента, показывающего записи в постраничном режиме, размещён другой функционал, показывающий (или только пытающийся это сделать) какие-то записи также в постраничном режиме.
Например, такая проблема часто бывает в функционале поиска (в т.ч. в готовых шаблонах), т.к. перед выводом списка подключаются другие компоненты, которые используют постраничную навигацию, поэтому компоненте списка использует индекс постраничной навигации отличный от первого, и поэтому стандартный функционал нашего модуля не работает.
Лучшее решение данного вопроса - исправление проблемы, чтобы постраничная навигация была PAGEN_1. А если это сложно (или нецелесообразно) - то модуль содержит отдельный параметр, позволяющий для отдельных страниц учитывать это:
Данный вариант означает, что для всех страниц внутри раздела /search/ модуль должен использовать PAGEN_3 вместо стандартного PAGEN_1, и тогда всё будет работать.
Кроме того, для программистов, есть относительно лёгкий способ исправления на сайте, чтобы вместо PAGEN_2, PAGEN_3 (и т.д.) использовался PAGEN_1. Принцип такой: нужно найти на странице начало кода, где компонент или некий кусок кода, который увеличивает индекс постраничной навигации (но в котором она не используется), и задать перед этим:
$GLOBALS['NavNum'] = 10;
а после этого:
$GLOBALS['NavNum'] = null;
Т.е. перед вызовом "лишнего" компонента, использующего постраничную навигацию, нужно задать заведомо большое значение индекса постраничной навигации, а после него - сбросить его в null, таким образом следующий компонент будет считать что постраничной навигации на странице пока не было, и будет использовать PAGEN_1, тогда функционал модуля должен работать.
Таким образом, мы меняем порядок индексов. Лишние будут использовать индекс 10, 11, и т.д. А после них мы обнуляем индекс, и наш компонент будет использовать индекс 1. В результате, достигается нужный эффект.
Конечно же, с точки зрения хорошего программиста, это "костыль". Правильное исправление проблемы значительно сложнее, а иногда исправление требует значительного изменения логики работы скрипта или компонента, что не всегда возможно. Поэтому, нужно выбирать - либо правильное и сложное решение, либо лёгкий костыль.
Разделы-ссылки - это новый функционал SEO-модуля, позволяющий для имеющихся разделов создать дополнительные разделы, которые будут указывать на ранее созданные разделы, при этом товаров в них не будет.
Данный механизм используется для улучшения навигации по каталогу.В качестве примера: сайт спортивных товаров. Нам нужно создать раздел «Детские трёхколёсные велосипеды». При этом на сайте имеются следующие большие разделы:
В каком из них создать новый раздел с трёхколёсными велосипедами? Во многих случаях необходимо добавить сразу в оба раздела (возможно, их даже больше чем два), чтобы в меню раздел «Детские трёхколёсные велосипеды» были сразу и в «Велосипедах» и в «Детских товарах». Но в этом случае возникает много сложностей, которые решить либо невозможно, либо дорого.
Другой пример: раздел «Карты памяти» на сайте бытовой техники: он находится и в разделе «Аксессуары для телефонов», и в разделе «Фото- и видео- техника».
Стандартного функционала Битрикса здесь нет, т.к. при такой схеме разделов в лучшем случае что можно придумать - это все товары внутри этих разделов привязывать к обоим разделам сразу. Очевидно, что это неудобно: если менеджер забудет привязать товар к обоим разделам, или эта привязка слетит по какой-то причине, пользователь при открытии раздела увидит только часть товаров. Кроме того, для SEO это плохо, т.к. вес одной страницы делится на две.
Но даже если привязать все товары к обоим разделам сразу, при необходимости добавления этого раздела в дополнительное место (например, в раздел «Летний спорт»), придётся тратить много времени на привязку всех товаров к дополнительному разделу.
Кроме того, если Ваш каталог загружается из 1С или из внешних источников, организовать такой подход просто нереально.
Наш модуль имеет функционал, который позволяет создать дополнительные разделы, но чтобы они не имели собственных ссылок, а указывали на уже существующие разделы. Это примерно как ярлыки для папок в Windows.
Принцип работы прост: в настройках модуля для каждого инфоблока необходимо создать отдельное свойство (свойства - отдельные для каждого из сайтов), и в нём указывать либо прямую ссылку на нужный раздел (например, /catalog/velosipedy/), либо числовой идентификатор раздела, на который он будет указывать. В итоге получится такая схема: раздел «Детские трёхколёсные велосипеды» физически находится в разделе «Велосипеды», а дополнительные разделы, созданные в разделах «Детские товары» и «Летний спорт», будут являться лишь ссылками, и в них необходимо указать ID раздела «Велосипеды» (или его адрес: /catalog/velosipedy/). Открытие таких ссылок будет перенаправлять пользователей на раздел с детскими велосипедами внутри раздела со всеми велосипедами.
Т.е. когда опция включена и свойство создано, остаётся с помощью разделов-ссылок создать нужную структуру разделов, и в таких разделах-ссылках прописать нужные ссылки.
Важно!
Замена ссылок в HTML (данная опция включается отдельно в настройках модуля) нужна для того, чтобы в HTML-коде у разделов-ссылок сразу были нужные адреса, т.к. если у них будет старый адрес, он преобразуется на новый только с дополнительным редиректом, а это не всегда желательно.
При активированном функционале каждое сохранение раздела-ссылки с указанным адресом (или ID раздела) сохраняет эти данные в таблице модуля. И затем, при открытии любой страницы модуль получает все ссылки и для каждой меняет все совпадения в коде страницы.
Таким образом, чтобы изменения применялись, необходимо чтобы галочка «Включить разделы-ссылки» была включена (вариант когда опция отключается на время заполнения данных в разделах - невозможен), т.е. сначала галочка включается, потом заполняются ссылки в разделах.
Вы можете использовать любой из трёх вариантов указания ссылки, которая будет открываться на сайте:
Анализатор запросов - универсальный инструмент, который предоставляет статистику посещаемости сайта. В отличие от таких сервисов как Яндекс.Метрика и Google-аналитика, данный инструмент собирает информацию, в первую очередь, о роботах, в т.ч. поисковых роботах.
Используя анализатор, Вы можете увидеть, как часто к сайту обращаются различные роботы Яндекса (основной и мобильный роботы, роботы запросы картинок и видео, роботы Маркета, Метрики и другие), Google, Mail.ru и другие.
При этом, информация по каждому из сайтов доступна, в том числе, по каждому из доменов отдельно (в большинстве случаев разные домены - это разные регионы). Таким образом, можно понять, по каким регионам какие поисковики как много запросов совершают.
Также имеется статистика по наиболее частых роботам - это может пригодиться для общего понимания, того, какие роботы обращаются к сайту чрезмерно часто (чтобы либо заблокировать, если это совершенно ненужный робот, либо ограничить его активность через robots.txt, если это возможно).
Модуль анализирует посещения только по User-Agent, это текстовая строка-идентификатор, которую передаёт браузер при обращении к сайту.
Например, Google при обращении сообщает "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)".
Яндекс сообщает "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)".
По этой строке модуль анализирует инициатора запроса. Самое важное, что важно понимать - если какой-то робот, не хочет, чтобы его считали роботом, он маскируется под обычного пользователя. И посылает идентификатор такой же, как и посылают обычные браузеры.
Модуль все такие обращения фиксирует как обращения от пользователей. Сервисы аналитики, например, Яндекс.Метрика, работает на других принципах - они анализируют всю информацию о хите, включая отслеживание его активности на странице, поэтому такие сервисы могут более точно отличать пользователей от замаскированных роботов. Поэтому, если модуль посчитал что обычных пользователей всего 100, то Яндекс.Метрика может сообщить, что пользователей, например, всего 50, или даже 20, т.к. Яндекс более точно отсеивает таких роботов.
В модуле же высокая точность не требуется. Для модуля приоритетная задача - анализ поисковых роботов, а все они себя идентифицируют правильно.
В Битриксе используется мультисайтовость, и она имеет свои нюансы.
Например, административный раздел, фактически, является отдельным сайтом, поэтому все запросы в админку (в т.ч. AJAX-запросы из публичной части к скриптам внутри папки /bitrix/) не учитываются как запросы к сайту.
И это даже в том случае, когда мультисайтовость не используется. Т.е. если на Вашей платформе Битрикс всего один сайт, а публичная часть выполняет AJAX-запросы, например, в /bitrix/templates/ или в /bitrix/components/ - то сайт не будет определён, т.к. фактически эти запросы выполняются в админку.
Возможно, в дальнейшем некоторые распространённые случаи будут автоматически привязываться модулем к нужному сайту, но доля таких запросов - очень небольшая, и она несильно влияет на статистику.
Да, это возможно, если Вы обладаете хотя бы начальными навыками программирования.
Основное, что нужно знать - модуль выполняет обработчик OnGetAnalyzerMetrics для получения дополнительных диаграмм, в качестве единственного аргумента передаётся (по ссылке) массив встроенных графиков. Поэтому, если хотите добавить свой - просто добавьте в этот массив свой элемент наподобие уже существующих.
Новый элемент должен добавляться в массив со своим кодом (только латинские символы и цифры), а в самом массиве должны быть следующие данные: NAME (название), GROUP (группа - GENERAL, SEARCHER, USERS, GLOBAL или CUSTOM), SORT (индекс сортировки, по умолчанию 1000), COLOR (CSS-цвет диаграммы), и CALLBACK - функция, принимающая три аргумента: $strSiteId, &$intCountYes, &$intCountAll, где $strSiteId - это двузначный идентификатор сайта, $intCountYes - число подходящих элементов, $intCountAll - общее число элементов для диаграммы [для каждой из групп заранее высчитывается дефолтное значение, поэтому можно его не менять].
Пример обработчика для добавления графика для Яндекс.Турбо:
addEventHandler('webdebug.seo', 'OnGetAnalyzerMetrics', function(&$arMetrics){ $arMetrics['YANDEX_TURBO'] = [ 'GROUP' => 'CUSTOM', 'SORT' => 1000, 'NAME' => 'Запросы Яндекс.Турбо', 'COLOR' => 'blue', 'CALLBACK' => function($strSiteId, &$intCountYes, &$intCountAll){ $intCountYes = static::getCount($strSiteId, ['=CLI' => 'N', '=BOT_CODE' => 'YandexTurbo']); } ]; });Для группы CUSTOM модуль автоматически считает что $intCountAll это число всех записей запросов к сайту $strSiteId с фильтром ['=CLI' => 'N'], а в приведённом примере считаем $intCountYes количество всех запросов к сайту $strSiteId с фильтром ['=CLI' => 'N', '=BOT_CODE' => 'YandexTurbo'].
Вопрос блокировки некоторых роботов - весьма существенный. Некоторые роботы очень активно обращаются к сайту, создавая повышенную нагрузку. При этом, часть из них просто совершенно не нужна, а часть может быть даже вредна - например, некоторые роботы как будто обходят сайт по старым ссылкам, из-за чего возникает очень много ошибок 404.
Блокировка работает легко. Нужно в настройках модуля для выбранного сайта открыть раздел «Индексация» - «Блокировка роботов», отметить галочку «Блокировать роботов», и в текстовом поле «Список роботов для блокировки» указать (каждого - на отдельной строке) список ботов для блокировки.
При этом, необходимо указывать код ботов, как они определяются по списку роботов (глобальному или отдельному для сайта). Например, мы хотим заблокировать этих роботов (эти роботы мы действительно рекомендуем блокировать):Именно эти четыре строки с краткими названиями роботов и следует указать в поле «Список роботов для блокировки».
При этом доступна возможность указать HTTP-код для блокировки, и даже текст ответа, например: "Асталависта, #BOT#!" - при блокировке бот увидит сообщение "Асталависта, MJ12bot!".
Регионы - это новый функционал в модуле, который позволяет как выбирать пользователям свой регион, так и продвигать свой сайт в разных регионах.
Модуль имеет много различных настроек и обработчиков, позволяющих использовать функционал регионов по максимуму.
На данный момент в модуле доступны четыре совершенно разных режима работы регионов:
Режим «Поддомены для каждого города» - классический вариант, который отличается понятной логикой работы. Для обеспечения работы потребуется всего лишь настроить автоматическую адресацию всех поддоменов на основной домен. Т.е. если сайт работает на домене site.ru, требуется настроить сразу все поддомены (*.site.ru) на тот же сайт.
Режим «Домены для каждого города» - вариант, подходящий для небольшого числа городов, когда для каждого города используется свой домен (можно указывать также поддомены). Дополнительная настройка не требуется.
Особого рассмотрения заслуживает режим «Виртуальные разделы». Волшебство нашего модуля в том, что для поддержки такого режима в общем-то ничего не требуется. Хотя в разных случаях может потребовать донастройка отдельных нюансов, но в общем случае всё должно работать полностью автоматически. Данный функционал совершенно уникален, не имеет аналогов. ВНИМАНИЕ! Поддержка многосайтовости на одном домене - лишь частичная! Некоторые возможности недоступны. В частности, robotx.txt - он логически должен объединять все robots.txt и sitemap.xml каждого из вложенных сайтов, но такой возможности в модуле нет.
Режим «Без изменения адреса» - простейший, можно сказать примитивный. Он не изменяет адреса. Служит только для предоставления пользователям возможность выбора города.
Каждый режим имеет свои настройки, позволяющие подстроить работу модуля под Вашу задачу.
Начало работы
Перед началом работы необходимо создать инфоблок: он создаётся автоматически при включении функционала регионов в настройках модуля, либо отдельной кнопкой там же.
Для каждого сайта используется свой инфоблок регионов. Все инфоблоки регионов не показываются в стандартном меню инфоблоков: они показываются только в модуле.
При переходе к списку регионов в инфоблоке в подменю кнопки «Добавить город» есть возможность экспорта и импорта регионов.
На данный На данный момент модуль предоставляет одну базу городов, распределённую по субъектам/регионам России, Вы можете её загрузить и использовать, подкорректировав данные. А можете создать свою базу с нуля. Для каждого города необходимо указание названия и кода, желательно указание координат для определения местоположения средствами браузера. момент модуль предоставляет одну базу городов, распределённую по субъектам/регионам России, Вы можете её загрузить и использовать, подкорректировав данные. А можете создать свою базу с нуля. Для каждого города необходимо указание названия и кода, желательно указание координат для определения местоположения средствами браузера.
Когда инфоблок создан, останется только разместить на сайте компонент указания текущего города (об этом ниже) и проверить служебные настройки SypexGeo на первой вкладке настроек модуля (если необходимо определение города по IP).Размещение на сайте
На сайте необходимо разместить компонент webdebug.seo:regions.link, это ссылка, в которой указан текущий город, и при нажатии на которую открывается всплывающее окно с выбором город (всплывающее окно реализуется компонентом webdebug.seo:regions.popup, но его вручную подключать не нужно - это делает модуль, при AJAX-запросе из указанного ранее компонента).
В настройках этого компонента всего один необязательный параметр - заголовок блока, поэтому с размещением на сайте не должно возникнуть сложностей.
Единственный нюанс, на который стоит обратить внимание - подключение jQuery. По умолчанию, модуль подключает на сайте jQuery версии 3, это управляется в настройках модуля в разделе «Разное» (для каждого сайта отдельно).
Если в Вашем случае библиотека jQuery на сайте уже подключена, выберите вариант «Не подключать автоматически».
После размещения компонента webdebug.seo:regions.link и при корректно подключенном jQuery на сайте отображается ссылка, в которой указан текущий определённый город (как определяется - ниже), по нажатию на ссылку открывается всплывающее окно выбора региона.
Как модуль определяет город
Модуль всегда определяет регион автоматически, а если пользователь ранее вручную выбрал регион - используется только вручную выбранный регион. Автоматический выбор происходит по четырём способам в указанном порядке (используется первый успешно определённый вариант):
Например, при работе регионов на поддоменах, при первом заходе пользователя на krasnodar.test.ru регион определится как Краснодар, на khavarovsk.test.ru - Хабаровск. Но как только пользователь выберет свой регион вручную, например, Москва, при заходе даже на те же поддомены регион будет определяться как Москва.
Наш функционал, как и все подобные модули, использует макросы для вывода названий городов. Например, чтобы на какой-то странице, в статье, товаре, или любом другом месте вывести название города в формате "купить в Краснодаре", используйте макрос с названием города в предложном падеже: "купить в #WD_SEO_REGION_NAME_P#".
На текущий момент доступны следующие макросы (в скобках указан пример вывода в зависимости от региона):
В целом, всё просто: за вывод кнопки выбора региона отвечает компонент webdebug.seo:regions.link, который можно использовать даже без параметров.
Поэтому, всё что необходимо сделать - добавить этот компонент в шапку сайта. Пример добавления кода:
<?$APPLICATION->IncludeComponent("webdebug.seo:regions.link", ".default", array());?>
В качестве примера покажем на шаблоне Аспро.Макс. В этом шаблоне уже есть собственный функционал работы с регионами («мультирегиональность»), но если по каким-то причинам этот функционал не подходит, можно его отключить и использовать функционал нашего модуля. Для примера рассмотрим вариант шапки №2.
Открываем файл /bitrix/templates/aspro_max/page_blocks/header/header_2.php.
Находим эту строку (на данный момент это строка №6):
$bIncludeRegionsList = $arRegions || ($arTheme['USE_REGIONALITY']['VALUE'] !== 'Y' && $arTheme['USE_REGIONALITY']['DEPENDENT_PARAMS']['REGIONALITY_IPCITY_IN_HEADER']['VALUE'] !== 'N');
Закомментируем её, добавив в начале символ решётки:
#$bIncludeRegionsList = $arRegions || ($arTheme['USE_REGIONALITY']['VALUE'] !== 'Y' && $arTheme['USE_REGIONALITY']['DEPENDENT_PARAMS']['REGIONALITY_IPCITY_IN_HEADER']['VALUE'] !== 'N');
Сразу после неё добавляем такую строку:
$bIncludeRegionsList = \Bitrix\Main\Loader::includeModule('webdebug.seo') && \WD\Seo\Regions\Manager::getInstance(SITE_ID)->isEnabled();
Это проверяет статус функционала регионов в нашем модуле - включён или выключен (галочка «Использовать регионы» в настройках модуля для данного сайта).
Далее, находим в этом же файле строку (на данный момент это строка №35):
<?\Aspro\Functions\CAsproMax::showRegionList();?>
Комментируем её, также добавляя перед кодом (но после символов <?) символ решётки:
<?#\Aspro\Functions\CAsproMax::showRegionList();?>
И сразу под ней размещаем компонент:
<?$APPLICATION->IncludeComponent("webdebug.seo:regions.link", ".default", array());?>
Также, конкретно в шаблоне aspro_max нужно добавить выбор региона в мобильной версии. Нужно открыть файл /bitrix/templates/aspro_max/page_blocks/header_mobile_menu_2.php (или с индексом 1, в зависимости от настроек aspro), закомментировать строку
CMax::ShowMobileRegions();
и после неё добавить строку
$APPLICATION->IncludeComponent("webdebug.seo:regions.link", ".default", array());
Всё! На этом добавление компонента закончено. Теперь, если в модуле для данного сайта включена галочка «Использовать регионы», то а данной области сайта будет показана ссылка, при нажатии на которую появится окно выбора региона.
Для работы данного компонента необходимо, чтобы на сайте был подключён jQuery. По умолчанию модуль сам подключает его (стандартным способом, из ядра Битрикс) версии 3, при необходимости в настройках модуля (раздел «Разное», опция «Версия jQuery, используемая на сайте» можно изменить версию или отменить автоматическое подключение.
Данная проблема может возникать на шаблоне Аспро Максимум при включённой опции «Всегда перенаправлять на выбранный регион».
Решение простое: следует добавить в исключения указанный файл:
/bitrix/templates/aspro_max/js/setTheme.php
Если в модуле для сайта заданы регионы, при открытии сайта в любом случае для пользователя должен определиться регион. Если пользователь сделал ручной выбор, то всегда будет действовать он, иначе проверяется регион по IP-адресу, если не определён - по поддомену/домену/адресу, если и это не привело к определению региона - используется базовый регион (если базового нет - используется первый найденный).
Данные из региона можно вывести различными способами. Один из наиболее удобных - использование макросов. По умолчанию доступны макросы, означающие ID, код и название региона, а также названия региона в разных падежах. Все они начинаются с префикса WD_SEO_REGION_ и обрамлены символами решётки:
#WD_SEO_REGION_ID#
#WD_SEO_REGION_CODE# (krasnodar)
#WD_SEO_REGION_NAME# (Краснодар)
#WD_SEO_REGION_NAME_R# (Краснодара)
#WD_SEO_REGION_NAME_D# (Краснодару)
#WD_SEO_REGION_NAME_V# (Краснодар)
#WD_SEO_REGION_NAME_T# (Краснодаром)
#WD_SEO_REGION_NAME_P# (Краснодаре)
Буква после NAME означает первую букву падежа в транслите (R - родительный, D - дательный, V - винительный, T - творительный, P - предложный).
В настройках модуля имеется возможность добавить алиасы (псевдонимы) для данных полей: это удобно если на сайте в текстах уже заданы макросы от других модулей, которые уже не используются.
Кроме того, модуль добавляет к описанным макросам дополнительные - из свойств инфоблока (по символьному коду). Например, если создать свойство с кодом PHONE (или phone) - тогда на сайте можно использовать макрос #WD_SEO_REGION_PHONE#.
Также, модуль предоставляет несколько API-методов для получения текущего региона. Методом get() можно получить текущие базовые данные региона:
print_r(\WD\Seo\Regions\Manager::getInstance(SITE_ID)->get());Этот код выведет примерно такой результат:
Array ( [ID] => 123 [CODE] => krasnodar [NAME] => Краснодар [NAME_2] => [NAME_R] => Краснодара [NAME_D] => Краснодару [NAME_V] => Краснодар [NAME_T] => Краснодаром [NAME_P] => Краснодаре [IS_BASE] => N )Метод getRegion() получает данные региона как элемента инфоблока (включая массив PROPERTIES):
print_r(\WD\Seo\Regions\Manager::getInstance(SITE_ID)->get());Метод getRegionId() получает только ID региона (ID элемента инфоблока):
print_r(\WD\Seo\Regions\Manager::getInstance(SITE_ID)->getRegionId());
Внимание! Здесь описан механизм добавления ссылок при генерации карты сайта средствами Битрикса. При генерации карты сайта средствами модуля всё выполняется автоматически, без необходимости что-то донастраивать.
Запуск процесса добавления ссылок происходит в момент окончания генерации Битриксом карты сайта, поддерживается как старый функционал генерации карты сайта (через модуль «Поиск» - файл sitemap_index.php), так и новый (через пункт меню «Маркетинг» - файл sitemap.xml). В зависимости от настройки модуля «Мгновенная модификация карты сайта» запуск генерации происходит либо непосредственно в момент окончания генерации Битриксом карты сайта, либо в этот момент создаётся агент, который в ближайшее время запустит этот процесс.
Во время выполнения операции модуль отбирает из всех имеющихся ссылок активные и разрешённые для выгрузки (галочка «Запретить добавление в карту сайту» в каждой ссылке), и выгружает их в файлы вида webdebug_seo_1.xml в корне сайта (и так - для каждого сайта).
После окончания генерации XML-файлов модуль в созданные Битриксом карты сайта дописывает ссылки на созданные модулем карты. Таким образом, в итоговой карте сайта имеется всё то, что выгрузил Битрикс и всё то, что выгрузил наш модуль.
Также, запуск генерации карты сайта можно выполнить через API:
\WD\Seo\UrlSitemap::execute('s1', 'sitemap.xml');
где первый аргумент - идентификатор сайта (обязателен), а второй - имя файла карты сайта, в который нужно вставить запись-указатель на карту сайта модуля (необязательный, если не указан - значение берётся из параметра «Имя файла карты сайта» в настройках модуля).
Начиная с версии 22.24.0 модуль умеет для шаблона aspro.max генерировать разные ссылки для разных поддоменом - этот функционал работает автоматически, запускается в момент окончания генерации карт для разных регионов.
Если в настройках модуля для конкретного сайта параметр «Отслеживание изменений в карте сайта» (в разделе «Настройки ссылок») указан верно, то проблема, скорее всего, заключается в незаполненности значения «Путь к корневой папке веб-сервера для этого сайта».
Проверьте настройки каждого сайта и для каждого сайта укажите собственный путь.
Генератор карты сайта модуля (добавлен в обновлении 23.5.0) немного похож на родной генератор карты сайта Битрикс (тот, который расположен в меню «Маркетинг» - «Поисковая оптимизация». Однако, в отличие от большинства остальных модулей, наш модуль не использует его в качестве основы.
Отличия от родного функционала следующие:
Особенно интересен здесь последний пункт. Обратите внимание, что в корне сайта файлы карты сайта не сохраняются. Более того, если нужно чтобы файл (обычно "sitemap.xml") работал через наш модуль, в корне сайта не должно быть этого файла! Иначе будет открываться именно этот файл, а не карта сайта из нашего модуля. А если этого файла нет, будет открываться карта сайта из нашего модуля.
Наверняка у Вас возник вопрос "как же это работает?". На самом деле, всё легко и просто. Если файла sitemap.xml в корне сайта нет, то при обращении к нему вся работа идёт через файл 404.php и правила обработки адресов (так работают все ЧПУ в Битриксе) - и примерно так же работает наш модуль. Т.е. всё, что требуется для корректной работы - чтобы не было файла с картой сайта в корне сайта, и чтобы на сайте корректно был настроен показ ошибки 404. Всё остальное модуль сделает сам: при обращении к sitemap.xml, если этого файла нет, модуль выводит содержимое соответствующего ему файла (с индексной картой сайта), который находится в отдельной папке, и эта индексная карта сайта содержит ссылки на вложенные карты сайта - на их реальный физические адреса в папке.
Благодаря этому, в корне сайта не хранится большое количество файлов карты сайта (они хранятся в отдельной папке, это настраивается), что значительно повышает удобство работы с файлами сайта.
Использование функционала очень простое: сначала укажите все основные параметры в форме настроек (вкладка «Настройки»), затем выберите какие обычные папки/файлы будут выгружены, и укажите (если требуется) картинки и названия картинок (вкладка «Файлы»), и затем настройте инфоблоки (вкладка «Инфоблоки») - выберите что выгружать (разделы и (или) элементы, картинки к ним), сохраните настройки и нажмите кнопку «Запустить генерацию карты сайта». Затем проверьте - всё ли в порядке (это можно сделать включив функционал и обратившись к файлу через браузер, либо через открыл файл вручную в указанной папке). Если всё в порядке - можно настроить автоматическую генерацию карты сайта, например, раз в сутки.
Генерация файла robots.txt (добавлена в обновлении 23.5.0), как и генерация карты сайта в модуле, работает нестандартно: это сделано для простоты и удобства настройки.
Чтобы функционал robots.txt нашего модуля работал, в корне сайта не должно быть файла robots.txt! Тогда модуль при обращении к этому файлу будет отдавать содержимое, которое генерирует сам.
В отличие от стандартного генератора robots.txt наш модуль имеет несколько преимуществ:
Процесс настройки очень простой - сначала нужно указать для каких роботов планируете вносить настройки (по умолчанию просто символ звёздочки, означающий всех роботов) - например, *, YandexBox, GoogleBot (каждая запись - на отдельный строке). Затем сохранить настройки, и в появившихся вкладках заполнить поля Disallow, Allow, Clean-param.
Обратите внимание, что файл карты сайта можно указать вручную (общий для всех роботов), а если он не указан - будет использоваться сгенерированная модулем карта сайта (если ранее была выполнена генерация).
Необходимо в файл init.php добавить следующий обработчик:
addEventHandler('solverweb.sitemap', 'OnAfterXMLGenerate', function($arMap, $xmldata, $sitemap_filename, $base){ if (\Bitrix\Main\Loader::includeModule('webdebug.seo') && $sitemap_filename) { \WD\Seo\UrlSitemap::execute($arMap['SITE_ID'], $sitemap_filename . '.xml'); } });
Также необходимо открыть файл /bitrix/modules/solverweb.sitemap/include.php и найти эту строку:
SWSitemapList::setEntityLastRun((int)$arMap['ID']);
Сразу после этой строки нужно вставить следующий код:
foreach (\GetModuleEvents(self::$MODULE_ID, "OnAfterXMLGenerate", true) as $arEvent){ \ExecuteModuleEventEx($arEvent, array($arMap, $xmldata, self::$settings['sitemap_filename'], $base)); }
Теперь при окончании генерации карты сайта модулем solverweb.sitemap будет запускаться наш модуль, который допишет в сгенерированную карту ссылки модуля.
Обратите внимание, что карта сайта в указанном модуле должна генерироваться с отмеченной опцией «Разбить файл на части» (это важно!), а также в настройках нашего модуля необходимо указать корректное имя файла, если требуется (по умолчанию - sitemap.xml).
Да, такое возможно. Модуль позволяет использовать дополнительный фильтр при поиске выгружаемых в карту товаров (через обработчик) - там можно указывать любые условия, в т.ч. по цене, доступности, и т.д. Код события обработчика - OnSitemapGetIBlockElementFilter.
Событие получает массив фильтра, в котором по умолчанию только инфоблок и активность.
Вот пример реализации на сайте:
addEventHandler('webdebug.seo', 'onSitemapGetIBlockElementFilter', function(&$arFilter){ if(in_array($arFilter['IBLOCK_ID'], [2, 3])){ $arFilter['>CATALOG_PRICE_1'] = 2000; } });
Этот обработчик нужно прописать (предварительно скорректировать) в init.php.
В данном примере для инфоблоков 2 и 3 мы запрещаем выгрузку товаров с ценой 2000р и ниже
addEventHandler('webdebug.seo', 'OnSitemapGetSteps', function(&$arSteps){ $arSteps['MY_FILE'] = [ 'CALLBACK' => function(&$arSession, $exporter){ $exporter->writeXml($arSession['FILES'], 'my_sitemap_file_custom.xml', file_get_contents($_SERVER['DOCUMENT_ROOT'].'/sitemap-test.xml'), NULL); }, ]; });При этом нужно указать корректный путь к XML-файлу.
В административной части сайта перейдите в «SEO - мастер» - «Все ссылки», нажмите кнопку «Добавить ссылку», укажите все необходимые поля (кроме служебных) и сохраните.
Важный нюанс: если Вы заполните поле «Желаемый адрес», старая страница будет выполнять редирект на этот адрес.
В публичной части сайта задача выполняется ещё быстрее. Просто перейдите на нужную страницу, нажмите на панели управления кнопку «SEO - мастер», откроется окно с полями для заполнения, причём поле с текущим адресом уже будет заполнено. Поэтому Вы можете сразу перейти на вкладку «SEO-данные», заполнить требуемые значения и сохранить. Всё, готово!
В случае, если для какой-то страницы необходимо очистить сохранённые ранее данные, откройте эту страницу, нажмите кнопку «SEO - мастер», в открывшемся окне нажмите кнопку «Удалить данные по текущей странице» и подтвердите удаление.
Модуль «Универсальная галерея» использует особый вид макросов, который похож на макросы SEO-текстов нашего модуля, но имеет другой формат: ##G23#template_name#. Поэтому модуль, до версии 22.22.6, не имеет возможности работы с данным модулем.
Обновление 22.22.6 решает данную проблему, но при этом на сайте требуется прописать два дополнительных обработчика:
addEventHandler('webdebug.seo', 'OnBeforeSeoTextTransform', function($obSeoText, &$strText, &$arValues){ if(\Bitrix\Main\Loader::includeModule('grain.gallery')){ $strText = preg_replace('/##G([1-9][0-9]*)#([A-Za-z0-9\_\-\.]*)#/', '%grain_gallery_$1_$2%', $strText); } }); addEventHandler('webdebug.seo', 'OnAfterSeoTextTransform', function($obSeoText, &$strText, $arValues){ if(\Bitrix\Main\Loader::includeModule('grain.gallery')){ $strText = preg_replace('/%grain_gallery_([1-9][0-9]*)_([A-Za-z0-9\_\-\.]*)%/', '##G$1#$2#', $strText); } });
Их нужно прописать в файле init.php (обычно находится в папке /local/php_interface/ или в папке /bitrix/php_interface/), при этом прописывать через админку Битрикса нельзя (любая опечатка, ошибка, сбой проводит к тому, что весь сайт падает), нужно прописывать через FTP или SSH.
Общий смысл данных обработчиков состоит в том, чтобы выполнить свои действия с текстом перед обработкой, и затем - после обработки. Сначала можно заменить нестандартные макросы, а затем вернуть их обратно, что и делают эти два обработчика.
Опишем пример решения задачи, в которой требуется заменить, например, "rossiiskii-proizvoditel:net" на "inostrannogo-proizvodstva". Точно так же можно заменить, например, "newproduct:yes" на "novinki", "dostupno-v-rassrochku:da" на "rassrochka" и т.д.
Данная возможность доступна в модуле, начиная с версии 22.12.2 (точнее, возможность доступна и в более ранней версии, но не так удобно).
Пример кода обработчика:
addEventHandler('webdebug.seo', 'OnGenerateSeoUrlFilter', function(&$arFilterPath, $obGenerator, $arChainValues){ foreach($arChainValues as $index => $arItem){ if($arItem['PROPERTY']['CODE'] == 'IS_RUSSIAN'){ switch($arItem['CONVERTED_DATA']['VALUE_CODE']){ case 'Y': $arFilterPath[$index]['CUSTOM'] = 'rossiiskogo-proizvodstva'; break; case 'N': $arFilterPath[$index]['CUSTOM'] = 'inostrannogo-proizvodstva'; break; } } } unset($arItem); });
Благодаря этому обработчику можно скорректировать, к примеру, такой «красивый» SEO-адрес:
Данная проблема решается обновлением 21.23.0. При этом, после установки обновления необходимо внести одно изменение в шаблоне.
Необходимо найти папку используемого шаблона компонента bitrix:catalog.smart.filter, открыть файл ajax.php и перед выводом результата (обычно через echo), например, echo $json; или echo CUtil::PHPToJSObject($arResult, true); добавить этот код:
if(\Bitrix\Main\Loader::includeModule('webdebug.seo')){ \WD\Seo\SmartFilter\AutoSeo::set($arResult, $arParams); \WD\Seo\HttpResponse::changeJson($json); /* Только для aspro.max и aspro.lite */ }Это необходимо в связи с тем, что в шаблонах имеются некоторые "фиксы", которые меняют ход работы AJAX-фильтрации.
В общем случае редактировать необходимо файл /bitrix/templates/aspro_next/components/bitrix/catalog/main/page_blocks/list_elements_1.php, он содержит код вывода списка товаров из раздела, включая описание раздела.
В коде имеется два блока - один отвечает за верхнее описание, второй - за нижнее. Место вывода описаний указывается в настройках аспро.
Блок кода, отвечающий за вывод описание сверху:
<?if($arParams["SHOW_SECTION_DESC"] != 'N' && strpos($_SERVER['REQUEST_URI'], 'PAGEN') === false):?> <?ob_start();?> <?if($posSectionDescr === "BOTH"):?> <?if ($arSection[$section_pos_top]):?> <div class="group_description_block top"> <div><?=$arSection[$section_pos_top]?></div> </div> <?endif;?> <?elseif($posSectionDescr === "TOP"):?> <?if($arSection[$arParams["SECTION_PREVIEW_PROPERTY"]]):?> <div class="group_description_block top"> <div><?=$arSection[$arParams["SECTION_PREVIEW_PROPERTY"]]?></div> </div> <?elseif($arSection["DESCRIPTION"]):?> <div class="group_description_block top"> <div><?=$arSection["DESCRIPTION"]?></div> </div> <?elseif($arSection["UF_SECTION_DESCR"]):?> <div class="group_description_block top"> <div><?=$arSection["UF_SECTION_DESCR"]?></div> </div> <?endif;?> <?endif;?> <? $html = ob_get_clean(); $APPLICATION->AddViewContent('top_desc', $html); $APPLICATION->ShowViewContent('sotbit_seometa_top_desc'); $APPLICATION->ShowViewContent('top_desc'); ?> <?endif;?>
Блок, отвечающий за вывода описаний внизу:
<?if($arParams["SHOW_SECTION_DESC"] != 'N' && strpos($_SERVER['REQUEST_URI'], 'PAGEN') === false):?> <?ob_start();?> <?if($posSectionDescr === "BOTH"):?> <?if($arSection[$section_pos_bottom]):?> <div class="group_description_block bottom"> <div><?=$arSection[$section_pos_bottom]?></div> </div> <?endif;?> <?elseif($posSectionDescr === "BOTTOM"):?> <?if($arSection[$arParams["SECTION_PREVIEW_PROPERTY"]]):?> <div class="group_description_block bottom"> <div><?=$arSection[$arParams["SECTION_PREVIEW_PROPERTY"]]?></div> </div> <?elseif ($arSection["DESCRIPTION"]):?> <div class="group_description_block bottom"> <div><?=$arSection["DESCRIPTION"]?></div> </div> <?elseif($arSection["UF_SECTION_DESCR"]):?> <div class="group_description_block bottom"> <div><?=$arSection["UF_SECTION_DESCR"]?></div> </div> <?endif;?> <?endif;?> <? $html = ob_get_clean(); $APPLICATION->AddViewContent('bottom_desc', $html); $APPLICATION->ShowViewContent('bottom_desc'); $APPLICATION->ShowViewContent('sotbit_seometa_bottom_desc'); $APPLICATION->ShowViewContent('sotbit_seometa_add_desc'); ?> <?endif;?>
Сначала вверху файла добавляем php-код:
global $wdSeoUrlData;
Далее, общий принцип простой: в каждом из указанных блоков имеется две ветки условий:
<?if($posSectionDescr === "BOTH"):?>
и
<?elseif($posSectionDescr === "BOTTOM"):?>Для верхнего описания в каждой из этих веток нужно добавить первым условием такое:
<?if(isset($wdSeoUrlData['DESCRIPTION_TOP']) && strlen($wdSeoUrlData['DESCRIPTION_TOP'])):?>При этом код следующий:
<div class="group_description_block top"> <div><?=$wdSeoUrlData['DESCRIPTION_TOP']?></div> </div>Для нижнего описания - такое:
<?if(isset($wdSeoUrlData['DESCRIPTION_BOTTOM']) && strlen($wdSeoUrlData['DESCRIPTION_BOTTOM'])):?>Код следующий:
<div class="group_description_block bottom"> <div><?=$wdSeoUrlData['DESCRIPTION_BOTTOM']?></div> </div>Итоговый вариант для верхнего описания:
<?if($arParams["SHOW_SECTION_DESC"] != 'N' && strpos($_SERVER['REQUEST_URI'], 'PAGEN') === false):?> <?ob_start();?> <?if($posSectionDescr === "BOTH"):?> <?if(isset($wdSeoUrlData['DESCRIPTION_TOP']) && strlen($wdSeoUrlData['DESCRIPTION_TOP'])):?>Итоговый вариант для нижнего описания:
<div class="group_description_block top"> <div><?=$wdSeoUrlData['DESCRIPTION_TOP']?></div> </div> <?elseif ($arSection[$section_pos_top]):?> <div class="group_description_block top"> <div><?=$arSection[$section_pos_top]?></div> </div> <?endif;?> <?elseif($posSectionDescr === "TOP"):?> <?if(isset($wdSeoUrlData['DESCRIPTION_TOP']) && strlen($wdSeoUrlData['DESCRIPTION_TOP'])):?> <div class="group_description_block top"> <div><?=$wdSeoUrlData['DESCRIPTION_TOP']?></div> </div> <?elseif($arSection[$arParams["SECTION_PREVIEW_PROPERTY"]]):?> <div class="group_description_block top"> <div><?=$arSection[$arParams["SECTION_PREVIEW_PROPERTY"]]?></div> </div> <?elseif($arSection["DESCRIPTION"]):?> <div class="group_description_block top"> <div><?=$arSection["DESCRIPTION"]?></div> </div> <?elseif($arSection["UF_SECTION_DESCR"]):?> <div class="group_description_block top"> <div><?=$arSection["UF_SECTION_DESCR"]?></div> </div> <?endif;?> <?endif;?> <? $html = ob_get_clean(); $APPLICATION->AddViewContent('top_desc', $html); $APPLICATION->ShowViewContent('sotbit_seometa_top_desc'); $APPLICATION->ShowViewContent('top_desc'); ?> <?endif;?>
<?if($arParams["SHOW_SECTION_DESC"] != 'N' && strpos($_SERVER['REQUEST_URI'], 'PAGEN') === false):?> <?ob_start();?> <?if($posSectionDescr === "BOTH"):?> <?if(isset($wdSeoUrlData['DESCRIPTION_BOTTOM']) && strlen($wdSeoUrlData['DESCRIPTION_BOTTOM'])):?> <div class="group_description_block bottom"> <div><?=$wdSeoUrlData['DESCRIPTION_BOTTOM']?></div> </div> <?elseif($arSection[$section_pos_bottom]):?> <div class="group_description_block bottom"> <div><?=$arSection[$section_pos_bottom]?></div> </div> <?endif;?> <?elseif($posSectionDescr === "BOTTOM"):?> <?if(isset($wdSeoUrlData['DESCRIPTION_BOTTOM']) && strlen($wdSeoUrlData['DESCRIPTION_BOTTOM'])):?> <div class="group_description_block bottom"> <div><?=$wdSeoUrlData['DESCRIPTION_BOTTOM']?></div> </div> <?elseif($arSection[$arParams["SECTION_PREVIEW_PROPERTY"]]):?> <div class="group_description_block bottom"> <div><?=$arSection[$arParams["SECTION_PREVIEW_PROPERTY"]]?></div> </div> <?elseif ($arSection["DESCRIPTION"]):?> <div class="group_description_block bottom"> <div><?=$arSection["DESCRIPTION"]?></div> </div> <?elseif($arSection["UF_SECTION_DESCR"]):?> <div class="group_description_block bottom"> <div><?=$arSection["UF_SECTION_DESCR"]?></div> </div> <?endif;?> <?endif;?> <? $html = ob_get_clean(); $APPLICATION->AddViewContent('bottom_desc', $html); $APPLICATION->ShowViewContent('bottom_desc'); $APPLICATION->ShowViewContent('sotbit_seometa_bottom_desc'); $APPLICATION->ShowViewContent('sotbit_seometa_add_desc'); ?> <?endif;?>Важно! В шаблон ранее (другими программистами) могли быть внесены различные правки, для решения каких-то задач. Поэтому внимательно проверяйте код, т.к. просто скопировав представленные примеры, Вы можете перезатереть изменения, сделанные ранее.
В связи с ошибкой в шаблоне умного фильтра (версия 1.1.0) необходимо в result_modifier.php шаблона компонента умного фильтра добавить эту строку:
if(\Bitrix\Main\Loader::includeModule('webdebug.seo')){ $arParams['FORM_URL'] = $arResult["JS_FILTER_PARAMS"]["SEF_SET_FILTER_URL"]; }Эта строка указывает JS-фильтру, что фильтровать нужно по настоящему пути. Без этой правки параметр $arParams['FORM_URL'] отсутствует (равен NULL), поэтому JS-фильтр пытается фильтровать по «красивому» адресу, поэтому данные из АвтоSEO не применяются (и это логично: ведь если на странице применены данные из созданной SEO-ссылки, применять АвтоSEO нельзя).
Рассчитываем, что в следующих версиях эту ошибку исправят.
Аспро заменяет макросы регионов только там, где разработчики предусмотрели заранее, а при AJAX-фильтрации данные по регионам находятся отдельно, поэтому для AJAX-фильтрации это необходимо сделать самостоятельно. Необходимо в файле init.php на сайте добавить такой обработчик:
addEventHandler('webdebug.seo', 'onChangeFilterAjaxUrl', function(&$arJson, $strSiteId, $strUrl, $arSeoUrl){ if(\Bitrix\Main\ModuleManager::isModuleInstalled('aspro.max')){ \CMax::setRegionSeoMarks(); $func = function(&$content){ global $arRegion; foreach(\CMaxRegionality::$arSeoMarks as $mark => $field) { if(strpos($content, $mark) !== false) { if($arRegion) { if(is_array($arRegion[$field])){ $value = $bCompSaleOrderAjaxPost ? trim(\Bitrix\Main\Web\Json::encode($arRegion[$field]['TEXT']), '"') : $arRegion[$field]['TEXT']; $content = str_replace(array($mark, str_replace('#REGION_TAG_', '#REGION_STRIP_TAG_', $mark)), array($value, strip_tags($value)), $content); } else{ $value = $bCompSaleOrderAjaxPost ? trim(\Bitrix\Main\Web\Json::encode($arRegion[$field]), '"') : $arRegion[$field]; $content = str_replace(array($mark, str_replace('#REGION_TAG_', '#REGION_STRIP_TAG_', $mark)), array($value, strip_tags($value)), $content); } } else{ $content = str_replace(array($mark, str_replace('#REGION_TAG_', '#REGION_STRIP_TAG_', $mark)), '', $content); } } } }; foreach(['TITLE', 'H1', 'KEYWORDS', 'DESCRIPTION'] as $key){ if(isset($arJson['WD_SEO_META'][$key]) && mb_strlen($arJson['WD_SEO_META'][$key])){ $func($arJson['WD_SEO_META'][$key]); } } } });
Данная проблема является дополнительным побочным эффектом проблемы, связанной с ошибкой 404.
В данном шаблоне сайдбар выводится по такому условию:
<?if(!defined("ERROR_404")):?> <?$APPLICATION->IncludeComponent("bitrix:main.include", ".default", Array( "AREA_FILE_SHOW" => "sect", "AREA_FILE_SUFFIX" => "leftBlock", "AREA_FILE_RECURSIVE" => "Y", "EDIT_TEMPLATE" => "", ), false );?> <?endif;?>
А «красивые» адреса работают через страницу 404.php (как и многие другие в Битриксе), т.е. при срабатывании «красивого» адреса сначала подключается этот файл, затем определяется константа ERROR_404, и только потом подключается Битрикс. В итоге в шаблоне блок не будет никогда показываться.
Решение простое: всё, что следует выполнить, это в файле /404.php поменять указанные ниже строки, чтобы они были именно в таком порядке:
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); CHTTP::SetStatus("404 Not Found"); @define("ERROR_404", "Y");
На некоторых сайтах заголовок H1 - это то, над чем мучались многие программисты, и поэтому сейчас его вывод сделан нестандартно. Если это Ваш случай, модуль не сможет менять заголовок - требуется возврат механизма управления заголовками к стандартному.
Например, стандартно заголовок должен задаваться как $APPLICATION->setTitle() - и благодаря хитрым технологиям Битрикса заголовок подставляется в тег <h1> в конце генерации страницы. А если программист на сайте сделал простое <h1><?=$arResult["NAME"]?></h1> - модуль никогда не сможет менять этот заголовок. В таком случае помогут либо костыли, которые усложнят всё ещё больше, либо переделка к варианту, который и должен быть (т.е. использование $APPLICATION->showTitle(false))
Данная проблема связана с URL-адресами. Фактически модуль создаёт новую ссылку, которая должна работать только по заданному адресу. И она работает, пока адрес остаётся прежним.
На многих сайтах при сортировке в адресе появляются новые GET-параметры, например: ?sort=sort&order=desc, поэтому это уже не считается ссылкой модуля.
Другими словами, когда модуль видит ссылку /catalog/televizory-samsung/ он понимает, что это ссылка модуля, т.к. для данной ссылки имеется запись в таблице модуля. А когда модуль видит ссылку /catalog/televizory-samsung/?sort=sort&order=desc он не находит для неё соответствия и поэтому страница не работает.
Т.к. это незначащие параметры, их нужно добавить в список игнорируемых, это делается в настройках модуля для данного сайта: раздел «Настройки ссылок», параметр «Игнорируемые параметры URL»: нужно соответствующие параметры добавить в конце списка (каждый - на отдельной строке).
После этого модуль будет определять страницу /catalog/televizory-samsung/?sort=sort&order=desc как страницу /catalog/televizory-samsung/ (т.е. отбрасывать эти ненужные параметры), и ссылка будет корректно работать.
Проблема связана с механизмом работы модуля (это также связано с механизмом обработки адресов и страницей /404.php). Начнём с небольшого примера.
Например, у Вас на сайте работает каталог в разделе /catalog/ - Битрикс обрабатывает все ссылки, начинающиеся с /catalog/ файлом /catalog/index.php, через правила обработки адресов (которые выполняются до подключения основных скриптов Битрикса).Если Вы создаёте ЧПУ-ссылки, начинающиеся с /catalog/ - Битрикс обрабатывает эти ссылки правилами обработки, и, подключает php-файл, указанный в правилах обработки: в правилах для каталога обычно имеется правило #^/catalog/#, указывающее на файл /catalog/index.php, Битрикс подключает этот файл, в он подключает ядро Битрикса и страница отрабатывает как обычно.
Если же ссылка не начинается с /catalog/, Битрикс не находит правило обработки, подключает файл /404.php, который и устанавливает статус (если CHTTP::SetStatus вызывается до подключения header.php) и заголовок. Далее наш модуль отрабатывает корректно, в т.ч. устанавливая код ответа 200, но константа, определяющая режим 404 уже установлена, и отменить её нет возможности.
Соответственно, если Вы столкнулись с подобной проблемой, необходимо в файл 404.php (в корне сайта) внести корректировку: установка статуса 404 и установка константы ERROR_404 должны быть после подключения файла /bitrix/header.php:
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); CHTTP::SetStatus("404 Not Found"); @define("ERROR_404","Y");При этом несуществующие страницы будут считаться Битриксом существующими - в тех случаях, когда соответствующая проверка идёт в начале страницы (прологе), а не в конце (эпилоге).
Функционал SEO умного фильтра не генерирует все возможные комбинации
Если Вы настраиваете одно правило на генерацию ссылок по свойствам Бренд + Тип + Размер, модуль сгенерирует ссылки, которые соответствуют выбору именно трёх этих параметров. Если необходимо, чтобы модуль также создал ссылки для комбинации Бренд + Тип - или Тип + Размер - то для этого следует создать отдельные правила. Да, это увеличивает работ. Но это обеспечивает качество создаваемых SEO-данных. Дополнительная информация в вопросе Можно ли правило, настроенное для 1 раздела и 3 свойств, применить к другим разделам и правилам?.
Свойства в фильтре применяются только те, которые настроены для умного фильтра
Настроить адреса страниц можно на любые условия, в т.ч. со свойствами, не настроенными для умного фильтра, однако в большинстве случаев они не будут учитываться фильтром на странице, т.е. адрес будет корректным, мета-данные будут корректны, но фильтрация по товарам будет работать только по настроенным для умного фильтра свойствам.В композитном режиме редиректы не работают!
В композитном режиме могут не работать некоторые редиректы. Например, редирект для предотвращения повторяющихся слешей. Модуль не может отловить событие загрузки композитной страницы, поэтому и не может осуществить редирект.
Модуль определяет протокол (https или http) не из текущего адреса, что является ненадёжным, а из настроек.
Соответственно, достаточно зайти на страницу "Сайты" в нашем модуля, и для нужного сайта указать режим https:
Эта проблема может быть по нескольким причинам.
В первую очередь, если на сайте ранее были настроены какие-либо другие редиректы, то это может стать причиной. Такое бывает редко, но на текущий момент два случая уже зафиксированы, при этом проявлялось это в виде циклического редиректа.
Другой возможный случай - проблема с конфигурацией сервера или сайта. Зафиксирован случай, когда штатный метод определения протокола HttpRequest::isHttps()
сообщает, что текущий протокол - http даже когда протокол https. В данном случае необходимо разбираться, начиная с изучения данных в $_SERVER
: ключи SERVER_PORT
и HTTPS
.
Модуль устанавливает канонические адреса штатным способом:
$APPLICATION->setPageProperty('canonical', 'https://site.ru/catalog/');
Поэтому в случае наличия каких-либо проблем с их установкой на сайте, проблему следует искать на самом сайте. Среди распространённых проблем:
Нам поступает большое количество пожеланий для развития модуля, но не все из них возможно реализовать в модуле. Например:
Данная проблема может возникать в случаях, когда компонент каталога (обычно bitrix:catalog) работает в AJAX-режиме, и в его настройках включена опция «Включить эмуляцию навигации браузера».
Данную проблему нельзя назвать проблемой в прямом смысле.
Это особенность работы региональности в различных модулях - такие региональные метки заменяются только при обычном открытии страниц, а при AJAX-запросах это не может быть заменено автомтически, поэтому, если Вы используете макросы регионов в заголовке (а также в заголовке окна браузера, описании и ключевых словах), необходимо программировать на сайте обработчик, используя событие модуля onChangeFilterAjaxUrl.
Ниже приведён пример для модуля aspro.max, где $func - это функция, которая использует код в таком виде, как он написан в aspro.max:
addEventHandler('webdebug.seo', 'onChangeFilterAjaxUrl', function(&$arJson, $strSiteId, $strUrl, $arSeoUrl){ if(\Bitrix\Main\ModuleManager::isModuleInstalled('aspro.max')){ \CMax::setRegionSeoMarks(); $func = function(&$content){ global $arRegion; foreach(\CMaxRegionality::$arSeoMarks as $mark => $field) { if(strpos($content, $mark) !== false) { if($arRegion) { if(is_array($arRegion[$field])){ $value = $bCompSaleOrderAjaxPost ? trim(\Bitrix\Main\Web\Json::encode($arRegion[$field]['TEXT']), '"') : $arRegion[$field]['TEXT']; $content = str_replace(array($mark, str_replace('#REGION_TAG_', '#REGION_STRIP_TAG_', $mark)), array($value, strip_tags($value)), $content); } else{ $value = $bCompSaleOrderAjaxPost ? trim(\Bitrix\Main\Web\Json::encode($arRegion[$field]), '"') : $arRegion[$field]; $content = str_replace(array($mark, str_replace('#REGION_TAG_', '#REGION_STRIP_TAG_', $mark)), array($value, strip_tags($value)), $content); } } else{ $content = str_replace(array($mark, str_replace('#REGION_TAG_', '#REGION_STRIP_TAG_', $mark)), '', $content); } } } }; foreach(['TITLE', 'H1', 'KEYWORDS', 'DESCRIPTION'] as $key){ if(isset($arJson['WD_SEO_META'][$key]) && mb_strlen($arJson['WD_SEO_META'][$key])){ $func($arJson['WD_SEO_META'][$key]); } } } });
Проблемы могут быть самого разного характера. Опишем некоторые из них.
Некоторые функции (или классы) подключаются без проверки на повторное подключение. В данном случае следует понимать принцип работы модуля: для «красивых» адресов (в т.ч. сгенерированных страниц SEO для умного фильтра) модуль при подмене адресов выполняет повторное подключение скриптов Битрикса. Т.к. они выполняются через require_once, то дважды они не выполняются. Однако иногда программисты прямо в шаблонах определяют свои функции: такой подход уже приводит к ошибке когда только один и тот же шаблон подключается два раза (если того требует логика работы сайта), т.е. это неправильно. При работе модуля такой код также выполнится дважды. И если какая-то функция где-то в шаблоне определена (хотя в шаблонах функции вообще лучше не определять, это плохо) без использования function_exists, то это потенциальная проблема.
Нужно сказать, что на данный момент мы сталкивались только с описанной выше проблемой. Но также сайт после установки модуля может упасть и по другим причинам - например, если на сайте используется слишком старая (или наоборот - слишком новая) версия PHP.
Также, модуль использует несколько обработчиков, выполняющихся в начале работы на каждом хите - соответственно, если на сайте задан обработчик, конфликтующий с модулем, это также может стать причиной проблем.
Другой частой проблемой является ошибка с кодировкой таблиц в базе - для этого можно запустить стандартный инструмент «Проверка сайта» в Битриксе, если проверке покажет ошибки, связанные с кодировками - вероятно, проблема в этом. Например, может так получиться, что кодировка таблицы сайтов Битрикса отличается от кодировки таблицы сайтов модуля, и тогда их совместная работа невозможна, будет ошибка "Mysql query error: (1267) Illegal mix of collations".
Возможны и другие причины. Если не получается понять причину самостоятельно - напишите нам, мы обязательно поможем.
Нас часто спрашивают: а почему модуль не может просто так взять и выводить на сайте то, что в нём настраивают? Например, настроили красивую ссылку, с большим SEO-описанием, почему модуль автоматически это не выводит на сайте? Ответ простой: а где конкретно выводить? Вы можете составить технический алгоритм, который позволит автоматике с максимальной надёжностью прописать описание на сайте? И при этом чтобы страница не начала тормозить? Нет, рамках критериев универсальности, надёжности и производительности это невозможно.
Модуль сам по себе никогда не может на сайте что-то выводить. Всегда требуется где-то что-то отредактировать, чтобы разрешить модулю выводить что-либо. Это относится как в SEO-текстам, так и к ссылкам перелинковки.
Ведь каждый сайт уникален, даже такой простой элемент как описание раздела везде сделан по-своему, работает по-своему, и при этом находится в своём месте. Кроме того, мы, как разработчики, понимаем всю ответственность данного вопроса: при попытке модуля самовольно пытаться что-то прописывать на сайте любой уважающий себя программист возмутился бы такому подходу, т.к. на сайте всё должно быть под контролем, а не работать на жалком подобии искусственного интеллекта.
К тому же, такие попытки требовали бы больших ресурсов и просто были бы ненадёжны.
Поэтому, философия модуля подразумевает ручной вывод всей необходимой информации на сайте. Автоматически ничего не выводится кроме базовых SEO-данных (заголовок страницы, заголовок браузера, описание, ключевые слова, канонический адрес) - и это работает только потому, что в шаблоне уже вручную прописано где должны выводиться эти данные, а модуль всего лишь устанавливает их по собственных правилам.
Таким образом, чтобы на сайте выводились дополнительные SEO-тексты, нужно в соответствующих шаблонах добавить вывод этих описаний. Чтобы показывались кнопки перелинковки - нужно разместить в соответствующем месте шаблона компонент перелинковки.
Данная проблема может быть связана с проактивным фильтром модуля безопасности. В таком случае необходимо открыть его настройки (Настройки - Проактивная защита - Проактивный фильтр - Исключения) и добавить страницу модуля:
/bitrix/admin/wd_seo_wm_popup.php*
В результате должно быть примерно так:
В модуле на данный момент нет встроенных функций для этого, но можно использовать API для получения ссылок.
Для этого используйте метод \WD\Seo\UrlTable::getList.
В качестве примера можете скачать архив с php-файлом, который необходимо разместить где-либо на сайте для демонстрации - этот пример получает все ссылки из модуля (осторожно! если в модуле созданы тысячи ссылок, страница может подвиснуть!) и выводит их, группируя по разделам.
Для добавления собственных пунктов в меню в Битриксе используются свои механизмы - в частности, .wd_seo.menu.php и .wd_seo.menu_ext.php - где wd_seo это произвольный символьный код Вашего типа меню (он может быть задан в настройках модуля «Управление структурой», но это необязательно).
Чтобы вывести ссылки модуля в меню, прежде всего нужно в настройках компонента меню (bitrix:menu) отметить галочку «Подключать файлы с именами вида .тип_меню.menu_ext.php».
Затем загрузить в корень сайта файл .wd_seo.menu_ext.php, и всё, дополнительных действий в общем случае не требуется, ссылки должны выводиться в меню. Но они могут понадобиться в каждом отдельном случае - по таким вопросам необходимо будет обращаться к разработчикам сайта (возможно, на большую часть вопросов сможет ответить и мы, если шаблон меню разработан корректно и стандартно).
Если требуется ссылки добавить в карту сайта, необходимо дополнительное действие - в настройках главного модуля, в параметре «Тип меню для нулевого уровня карты сайта» (секция «Карта сайта») добавить в конце строки wd_seo (через запятую), чтобы получилось примерно так:
При этом, может возникнуть ситуация, когда в карте сайта уже имеется какой-либо раздел каталога (напр., «Каталог» - «Одежда»), и от модуля выводится «Одежда» отдельным пунктом со вложенными пунктами. В таком случае, чтобы ссылки модуля выводились в первом пункте, нужно добавить в шаблоне компонента bitrix:main.map файл result_modifier.php, в котором запрограммировано слияние ссылок.
Внимание! Повторная установка в демо-режиме приведет к окончанию демо‑режима и невозможности использовать модуль.
Если Вы не успели попробовать модуль, напишите нам, мы поможем