SEO Настройки

На любой странице вашего ресурса можно задать seo параметры - функциональные элементы кода страницы, которые несут в себе информацию для браузеров и поисковых систем и помогают оптимизировать поиск нужной информации на сайте.

Формирование SEO страниц

Формирование SEO страниц и их параметров осуществляется при помощи метода seoTemplates() - выполняет задание настроек для общих шаблонов SEO страниц. Этот метод должен располагаться в base классе модуля дополнения и возвращать массив seo настроек шаблонов страниц. Рассмотрим пример реализации метода для страницы статьи.

/**
 * Описание seo шаблонов страниц
 * @return array
 */
public function seoTemplates(): array
{
    return [
        'pages' => [
            'article-view' => [
                't'       => _t('site', 'Страница статьи'), # название шаблона
                'i'       => true,                          # имплементирован
                'inherit' => true,                          # наследуем
                'macros'  => [                              # макросы
                    'textshort' => ['t' => _t('site', 'Краткое описание (до 150 символов)')],
                ],
            ],
            ...
        ]
    ];
}

Шаблоны страниц располагаются в массиве по ключу pages и каждая имеет свой уникальный ключ, например article-view, который далее будет использован для формирования SEO таба в админ панели.

Можно выделить

  • общий шаблон настроек SEO параметров для всех страниц статей, он располагается в админ панели в пункте меню SEO,
  • частный шаблон для каждой статьи в отдельности, располагается как таб в админ панели в форме редактирования вашей страницы.

SEO шаблон в форме

Рассмотрим как создать таб настроек SEO параметров для каждой статьи в отдельности и какие поля в базе для этого необходимы. В шаблоне формы редактирования статьи необходимо задать такой таб при помощи метода конструктора форм tabSEO(tab_key), используя ранее заданный ключ SEO страницы в методе seoTemplates().

$form->tabSEO('article-view');

Для этого таба также необходимы поля в базе данных, в таблице страницы к которой вы задаете SEO параметры

CREATE TABLE `bff_articles` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,      -- ID статьи
  `title` varchar(255) NOT NULL DEFAULT '',           -- название
  `content` longtext NOT NULL DEFAULT '',             -- содержание
  `enabled` tinyint(1) unsigned NOT NULL DEFAULT '1', -- опубликована 
  ...
   `mtemplate` tinyint(1) UNSIGNED NOT NULL DEFAULT '1',
   `mtitle` varchar(200) NOT NULL DEFAULT '',
   `mkeywords` mediumtext ,
   `mdescription` mediumtext ,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • mtemplate - признак применения общего шаблона к SEO параметрам;
  • mtitle - заголовок страницы в теге <title>Заголовок статьи</title>;
  • mkeywords - ключевые слова в теге meta со значением атрибута name "keywords" <meta name="keywords" content="ключевые слова ...">;
  • mdescription - ключевые слова в теге meta со значением атрибута name "description" <meta name="description" content=" мета описание ...">.

Данные поля должны попадать в данные формы при ее отображении и валидироваться при ее сохранении. Также они могут быть мультиязычными и располагаться в текущей таблице или отдельной языковой для возможности выполнять перевод.

Общий SEO шаблон

Общий SEO шаблон для всех статей задается путем добавления подпункта меню в модуль SEO в админ панели. Для этого в файле формирования меню в админ панели вашего дополнения menu.php добавляем необходимый пункт меню.

<?php 
use bff;

bff::adminMenu()
    ->group('Статьи')
        ->add(_t('articles', 'Список'), 'articles', 'listing')
    # SEO
    ->group('SEO')
        ->add(_t('articles', 'Статьи'), 'articles', 'seo_templates_edit')
            ->access(['articles', 'seo'])
;

Применение SEO настроек для страницы

Перед отрисовкой статьи необходимо установить ее SEO параметры, задать макросы. Устанавливаем meta-теги для страницы статьи при помощи метода setMeta(), доступного во frontend контроллере модуля вашего дополнения. Рассмотрим пример его применения.

/**
  * Страница статьи
  * @return string HTML
  */
 public function articleView()
 {
     $articleID = $this->input->getpost('id', TYPE_UINT);
     if (empty($articleID)) {
         $this->errors->error404();
     }
 
     $data = $this->getArticleData($articleID); // данные статьи, должны включать все SEO параметры
 
     # SEO: Страница статьи
     $this->setMeta(
         'article-view', // ключ страницы, заданный в seo шаблоне 
         ['textshort' =>  \tpl::truncate(strip_tags($data['descr']), 150, '...')], // данные для макросов
         $data // мета-данные страницы, передаются по ссылке @ref
     );
 
     return $this->viewPHP($data, 'article');
 }

Отметим, что данные макросов задаюся в отдельном массиве, а мета-данные страницы передаются по ссылке, $data должен содержать mtemplate, mtitle, mkeywords, mdescription с учетом текущего языка.