Задать вопрос

Yii: Универсальный компонент вывода SEO метатегов

Хотел бы сделать универсальное средство для вывода SEO метатегов для любой модели данных и задался вопросом как это лучше реализовать:
1. Через Behavior — боюсь что не получится, ибо он не взаимодействует с рендером. Т.е. такой код увы не работает
SeoBehavior.php
<[code>

public function beforeSave($event){
Yii::app()->clientScript->registerMetaTag('This is an example', 'description');
return parent::beforeSave($event);
}


Так же не понятно в таком подходе как создавать html тег[TITLE].

2. через модуль. Но тогда не очень очевидно как его подключать. Хотелось бы избежать слишком централизованного инклайда (в конфиге, т.к. разные модели могут иметь разные правила составления метатегов)) и излишне сложного подключения.

Что хотелось бы в идеале?

В идеале как я вижу работу «прикрутки» примерно так: подключаем в модели его, указывая какие поля отвечают за какие мета теги в рендере. Дальше он все делает сам.
'seo' => array(
'class'=>'ext.seo.SeoBehavior',
'titleField'=>'title',
),


Какие будут идеи по поводу реализации?
  • Вопрос задан
  • 8459 просмотров
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
sdevalex
@sdevalex
Сейчас поисковики не обращают внимание на метатеги keywords и description. Смысла ставить на страницу их вообще нет. Заголовок делать именно заголовком, без каких либо примисей.

А по реализации почему бы не сделать так?..

//...
public function beforeSave($event){
    Yii::app()->controller->setMetaData('title', 'title...');
    Yii::app()->controller->setMetaData('keywords', 'keywords...');
}
//...

class Controller extends CController
{
    private $_metaData = array();

    public function setMetaData($name, $value)
    {
        $this->_metaData[$name] = $value;
    }
    
    public function beforeRender()
    {
         if(isset($this->_metaData['title']))
         {
             $this->pageTitle = $this->_metaData['title'];
             unset($this->_metaData['title']);
         }
         
         foreach($this->_metaData as $name => $value)
             Yii::app()->clientScript->registerMetaTag($name, $value);
    }
}
Ответ написан
@Twin
Я делаю модуль для задач установки СЕО-параметров на конкретную модель и роут: github.com/nevmerzhitsky/yii2-seomodule.

От "сложного подключения" не уйти, если для генерации мета-тегом должны использоваться данные конкретной модели. Ведь нужно настроить, как из модели получать данные для description, keywords и title.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы