Магазин на Yii2, часть 9. Добавляем мета-теги keywords и description

12.05.2019

Теги: SEOWeb-разработкаYii2ИнтернетМагазинКаталогТоваровМетаТегиПрактикаФреймворк

Давайте немного подумаем о SEO-оптимизации и установим для страниц нашего сайта мета-теги. Мета-теги влияют на то, как отображатся и какую позицию занимает страница сайта в поисковой выдаче Yandex и Google. При прочих равных условиях поисковики отдают предпочтение сайту с грамотно сформированными мета-тегами.

В базе данных для таблиц category и product у нас есть поля keywords и description. Эти поля будут заполняться при добавлении новых разделов и товаров. На случай, если это поля будут не заполнены, предусмотрим некоторое значения по умолчанию. Для этого открываем на редактирование файл config/params.php:

<?php
return [
    'adminEmail' => 'admin@example.com',
    'senderEmail' => 'noreply@example.com',
    'senderName' => 'Example.com mailer',
    /*
     * Название магазина, например «Lamoda» или «WildBerries»
     */
    'shopName' => 'Магазин одежды и обуви',
    /*
     * Значения по умолчанию для мета-тегов title, keywords и description
     */
    'defaultTitle' => 'Интернет-магазин модной одежды и обуви',
    'defaultKeywords' => 'одежда, обувь, мужская, женская, детская, зимняя, летняя',
    'defaultDescription' => 'Коллекции женской, мужской, детской одежды и обуви',
];

Поскольку мета-теги нужно устанавливать для всех страниц сайта, добавим метод в общий контроллер AppController:

<?php
namespace app\controllers;

use yii\web\Controller;
use Yii;

class AppController extends Controller {

    /**
     * Метод устанавливает мета-теги для страницы сайта
     * @param string $title
     * @param string $keywords
     * @param string $description
     */
    protected function setMetaTags($title = '', $keywords = '', $description = '') {
        $this->view->title = $title ?: Yii::$app->params['defaultTitle'];
        $this->view->registerMetaTag([
            'name' => 'keywords',
            'content' => $keywords ?: Yii::$app->params['defaultKeywords']
        ]);
        $this->view->registerMetaTag([
            'name' => 'description',
            'content' => $description ?: Yii::$app->params['defaultDescription']
        ]);
    }
}

Добавим вызов этого метода в контроллеры PageController и CategoryController:

<?php
namespace app\controllers;

use app\models\Product;
use Yii;

class PageController extends AppController {
    /*
     * Главная страница сайта
     */
    public function actionIndex() {
        // получаем лидеров продаж
        $hitProducts = Product::find()->where(['hit' => 1])->limit(3)->asArray()->all();
        // получаем новые товары
        $newProducts = Product::find()->where(['new' => 1])->limit(3)->asArray()->all();
        // получаем товары распродажи
        $saleProducts = Product::find()->where(['sale' => 1])->limit(3)->asArray()->all();

        // устанавливаем мета-теги для страницы
        $this->setMetaTags();
        
        return $this->render(
            'index',
            compact('hitProducts', 'newProducts', 'saleProducts')
        );
    }
}
<?php
namespace app\controllers;

use app\models\Category;
use app\models\Product;
use Yii;

class CatalogController extends AppController {

    public function actionCategory($id) {
        $id = (int)$id;
        $temp = new Category();
        // товары категории
        $products = $temp->getCategoryProducts($id);
        // данные о категории
        $category = $temp->getCategory($id);
        // устанавливаем мета-теги для страницы
        $this->setMetaTags(
            $category->name . ' | ' . Yii::$app->params['shopName'],
            $category->keywords,
            $category->description
        );
        return $this->render('category', compact('category', 'products'));
    }
}

Удаляем из view-шаблонов views/page/index.php и views/catalog/category.php код, отвечающий за установку заголовка страницы:

$this->title = 'Интернет-магазин';
$this->title = $category['name'];

Теперь установка заголовка страницы и мета-тегов у нас централизована, а не размазана по всем шаблонам.

Поиск: SEO • Web-разработка • Yii2 • Интернет магазин • Каталог товаров • Фреймворк • Мета теги

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.