Добавление мета тегов — Yii2

Мета-теги — это html-теги, с помощью которых указываются дополнительные данные о странице сайта. Влияют на то, как отображается и какую позицию занимает страница в поисковой выдаче. При прочих равных условиях поисковики отдают предпочтение сайту с грамотно сформированными мета-тегами.

Установка мета-тегов через контроллер:

<?php
namespace app\controllers;

use Yii;
use yii\web\Controller;

class SiteController extends Controller
{
    public function actionIndex() {
        return $this->render('index');
    }

    public function actionHello() {
        $this->view->title = 'Заголовок страницы';
        $this->view->registerMetaTag(
            ['name' => 'keywords', 'content' => 'Ключевые слова страницы']
        );
        $this->view->registerMetaTag(
            ['name' => 'description', 'content' => 'Краткое описание страницы']
        );
        return $this->render('hello');
    }
}

В layout-шаблон добавить вызов метода head():

<head>
    <meta charset="<?= Yii::$app->charset ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title><?= Html::encode($this->title) ?></title>
    <?php $this->head() ?>
</head>

В результате получим

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Заголовок страницы</title>
    <meta name="keywords" content="Ключевые слова страницы">
    <meta name="description" content="Краткое описание страницы">
    <link href="/web/assets/ca646842/css/bootstrap.css" rel="stylesheet">
    <link href="/web/css/site.css" rel="stylesheet">
</head>

Мета-теги можно зарегистрировать и в view-шаблоне:

<?php
/* @var $this yii\web\View */

use yii\helpers\Html;

$this->title = 'Заголовок страницы 2';
$this->registerMetaTag(
    ['name' => 'keywords', 'content' => 'Ключевые слова страницы 2']
);
$this->registerMetaTag(
    ['name' => 'description', 'content' => 'Краткое описание страницы 2']
);
?>
<div class="site-hello">
    <h1><?= Html::encode($this->title) ?></h1>
    <p>Вы можете изменять эту страницу, редактируя файл шаблона:</p>
    <code><?= __FILE__ ?></code>
</div>

Результат будет аналогичный:

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Заголовок страницы 2</title>
    <meta name="keywords" content="Ключевые слова страницы 2">
    <meta name="description" content="Краткое описание страницы 2">
    <link href="/web/assets/ca646842/css/bootstrap.css" rel="stylesheet">
    <link href="/web/css/site.css" rel="stylesheet">
</head>

Установка $this->title в шаблоне переопределит значение, установленное в контроллере. Здесь стоит обратить внимание на следующее: если зарегистрировать один и тот же тег дважды, то этот мета-тег два раза и будет добавлен на страницу. Такая ситуация может возникнуть в том случае, когда мета-тег был зарегистрирован в контроллере и в шаблоне.

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Заголовок страницы 2</title>
    <meta name="keywords" content="Ключевые слова страницы">
    <meta name="description" content="Краткое описание страницы">
    <meta name="keywords" content="Ключевые слова страницы 2">
    <meta name="description" content="Краткое описание страницы 2">
    <link href="/web/assets/ca646842/css/bootstrap.css" rel="stylesheet">
    <link href="/web/css/site.css" rel="stylesheet">
    </head>

Чтобы этого избежать, необходимо использовать дополнительный аргумент:

<?php
namespace app\controllers;

use Yii;
use yii\web\Controller;

class SiteController extends Controller
{
    public function actionIndex() {
        return $this->render('index');
    }

    public function actionHello() {
        $this->view->title = 'Заголовок страницы';
        $this->view->registerMetaTag(
            ['name' => 'keywords', 'content' => 'Ключевые слова страницы'], 'keywords'
        );
        $this->view->registerMetaTag(
            ['name' => 'description', 'content' => 'Краткое описание страницы'], 'description'
        );
        return $this->render('hello');
    }
}

<?php
/* @var $this yii\web\View */

use yii\helpers\Html;

$this->title = 'Заголовок страницы 2';
$this->registerMetaTag(
    ['name' => 'keywords', 'content' => 'Ключевые слова страницы 2'], 'keywords'
);
$this->registerMetaTag(
    ['name' => 'description', 'content' => 'Краткое описание страницы 2'], 'description'
);
?>
<div class="site-hello">
    <h1><?= Html::encode($this->title) ?></h1>
    <p>Вы можете изменять эту страницу, редактируя файл шаблона:</p>
    <code><?= __FILE__ ?></code>
</div>

В этом случае произойдет перезапись предыдущих данных.

Leave a Comment