Автоматизация Title, Мета-тегов, H1 в Opencart за 2 минуты

Разместил , 8 Янв.2015 / комментарий 91
Нашли то, что нужно вам? Закажи себе! Без переплат.

Надоело качать зараженные модули с варезов? Или не хочется покупать дорогостоящие никому не нужные надстройки? Тогда давайте вместе автоматизируем формирование title, мета-тегов и заголовка H1 в Opencart за несколько минут.

Задача

Автоматическая генерация конвертабельного и SEO-оптимизированного title, description, h1 на Opencart (не путаем с ocStore) для товаров, категорий (подкатегорий).

Проектирование Title, H1, Мета-тега Description для Opencart

Проектирование для интернет-магазина детского трикотажа на Opencart (там уже всё интегрировано, как пример для вас). Проект шаблонирования под этот сайт:

Шаблоны title

  1. Категории (Подкатегории): «Купить *Название категории* оптом и в розницу от производителя в Украине».
  2. Товары: «Купить *Название товара* оптом и в розницу – София Текстиль».

Шаблоны description

  1. Категории (Подкатегории): «София Текстиль предлагает купить фирменный *Название категории* оптом и в розницу в Украине. ✔Качественный трикотаж ✔Недорого ✔Всегда скидки и акции ☎+38 (098) 70-11-853».
  2. Товары: «*Название товара* от София Текстиль –✔Опт и розница ✔Качество ✔Низкая цена ✔Скидки и акции ☎+38 (098) 70-11-853».

Шаблоны H1:

  1. Категории (Подкатегории): «Купить *Название категории* в Украине»
  2. Для товаров не нужно менять.

Реализация (2 минуты)

Opencart 1.5.*.*

Заходим в папку сайт.ру/catalog/controller/product/

Категории (Подкатегории): Открываем файл category.php

Нахожу в поиске «setTitle». Согласно шаблона меняю всю строку на:

$this->document->setTitle('Купить '.$category_info['name'].' оптом и в розницу от производителя в Украине');

Строкой ниже находиться «setDescription». Меняю всю строку на:

$this->document->setDescription('София Текстиль предлагает купить фирменный '.$category_info['name'].' оптом и в розницу в Украине. ✔Качественный трикотаж ✔Недорого ✔Всегда скидки и акции ☎+38 (098) 70-11-853');

Несколькими строками ниже находиться data[‘heading_title’]. Меняю всю строку на:

$this->data['heading_title'] = 'Купить '.$category_info['name'].' в Украине';

Товары: Открываем файл product.php. По аналогии придерживаясь шаблона:

Нашли setTitle и setDescription, поменяли полностью 2 строки на:


$this->document->setTitle('Купить '.$product_info['name'].' оптом и в розницу – София Текстиль');
$this->document->setDescription($product_info['name'].' от София Текстиль – ✔Опт и розница ✔Качество ✔Низкая цена ✔Скидки и акции ☎+38 (098) 70-11-853');

Ниже, там где и в прошлый раз heading_title, поменяли на (там уже такой, какой мне нужен, но вы можете с помощью конкатенации присоединить по аналогии примера «Категории» нужные слова с обеих сторон переменной):


$this->data['heading_title'] = $product_info['name'];

Теперь просто замените мой текст шаблона на свой и дерзайте!

Opencart 2.*.*

После внесенных ниже изменений не забудьте обновить кэш модификатора (он обновляет весь кэш на сайте). Для этого зайдите в админке в «Модификации» — сверху справа кнопка обновления и очистки кэша!

Файлы и пути к ним такие же, как и для Opencart 1.5.*.*, только для правки используются следующие строки:

$this->document->setTitle($product_info['meta_title']);
$this->document->setDescription($product_info['meta_description']);
$this->document->setKeywords($product_info['meta_keyword']);
$data['heading_title'] = $product_info['name'];

Пример отредактированных строк:

$this->document->setTitle('Купить '.$product_info['name'].' в Украине - Кофе из Италии');
$this->document->setDescription('Кофе Моккачино предлагает купить '.$product_info['name'].' оптом и в розницу в Украине из Италии. ✔Качественный европейский кофе ✔Недорого ✔Всегда скидки и акции ☎+38 (098) 70-11-853']);
$this->document->setKeywords('купить, '.$product_info['name'].', украина, недорого, дешево, из италии, оригинал, опт, оптом');
 $data['heading_title'] = 'Купить '.$product_info['name']; 

Проверка внесенных изменений

После внесения и сохранения изменения для второй версии опенкарта не забудьте очистить кэш. Если у вас есть сторонний плагин кэширования — обязательно очистите кэш и там. Были случаи, когда принудительно страницы кэшировались у хостинга — в таком случаи попросите хостинг-провайдер очистить кэш сайта.

Изменения необходимо проверять непосредственно на страницах сайта в коде, а не в админке — в админке никаких изменений не будет — всё будет так, как было до этого!

Для проверка изменений зайдите в код страницы (cntr+U для Windows, cmd+U для Mac) и в поиске по коду страницы пропишите <title>, чтобы проверить измененившийся Title страницы, description — для проверка мета-описания description страницы, keywords — для проверки изменившихся ключевых слов в keywords, <h1 для проверки изменившегося названия.

Переменные Opencart

Переменные, которые могут понабиться при шаблонизации мета-тегов в Opencart 1.5.* и 2.*:

Переменные category.php:

  • $category_info[‘meta_title’] — Текущий title категории, заданный в админ-панели сайта. Берется из базы данных;
  • $category_info[‘meta_description’] — Текущий META description категории, заданное в админ-панели сайта. Берется из базы данных;
  • $category_info[‘meta_keyword’] — Текущий META keywords категории, заданный в админ-панели сайта. Берется из базы данных;
  • $category_info[‘name’] — Название категории;

Переменные product.php:

  • $product_info[‘meta_title’] — Текущий title товара, заданный в админ-панели сайта. Берется из базы данных;
  • $product_info[‘meta_description’] — Текущий META description товара, заданное в админ-панели сайта. Берется из базы данных;
  • $product_info[‘meta_keyword’] — Текущий META keywords товара, заданный в админ-панели сайта. Берется из базы данных;
  • $product_info[‘name’] — Название товара;
  • $product_info[‘manufacturer’] — Производитель товара;
  • $product_info[‘model’] — модель товара;
  • $product_info[‘weight’] — вес товара;
  • $product_info[‘length’] — длина товара;
  • $product_info[‘width’] — ширина товара;
  • $product_info[‘height’] — высота товара;
  • $product_info[‘sku’] — артикул товара;
  • $product_info[‘price’] — цена товара;
  • $product_info[‘stock_status’] — наличие товара.

Переменные manufacturer.php:

  • $manufacturer_info[‘meta_title’] — Текущий title производителя, заданный в админ-панели сайта. Берется из базы данных;
  • $manufacturer_info[‘meta_description’] — Текущий META description производителя, заданное в админ-панели сайта (если есть такое поле в админке на странице редактирования производителя). Берется из базы данных;
  • $manufacturer_info[‘meta_keyword’] — Текущий META keywords производителя, заданный в админ-панели сайта (если есть такое поле в админке на странице редактирования производителя). Берется из базы данных;
  • $manufacturer_info[‘name’] — Название производителя;

FAQ — Вопрос-ответ

Статья имела ошеломляющий успех и спрос в интернете, поэтому возникла необходимость сделать краткий FAQ по популярным вопросам и ответам на них.

  • Не вижу изменений в админ-панели, что делать? — Изменения не будут видны в админ-панели. Проверяйте код страниц, для которых проводили изменения (категория, товары или другие). Подробнее в разделе статьи «Проверка внесенных изменений»;
  • Как воспользоваться методом для многоязычного сайта? — Для многоязычного магазина разрабатывается индивидуальный код, поэтому советую воспользоваться услугами своего программиста или написать по контактам (будет стоить в районе $10-20 в зависимости от нагрузки);
  • Провел изменения, сохранил файлы, но в коде страниц изменений нет, что делать? — Очистите кэш. Подробнее в разделе статьи «Проверка внесенных изменений»;
  • Подойдет ли решение для моей версии магазина на Opencart? — Если номер версии начинается с цифр 1.5 или 2., то подходит, для применения к другим версиям — напишите в контакты, платно проведу изменения;
  • Можно ли добавить в meta description контактные телефоны в виде переменной на записанные в конфигурации? — Решение тут;
  • Подходит ли для моего сайта (и ссылка) — Подходит для всех сайтов с подходящей версией Opencart, кроме тех, в которых используются сторонние модули, уже использующие эти переменные. Несколько модулей находил в интернете, которые были написаны специально по идее моего решения;
  • Всем привет, я тоже изменил мета теги все как в инструкции, и те слова что добавил все стали знаком вопроса? — Решение в кодировке файла — нужно изменить на UTF-8 (через Notepad++ или аналоги);
  • Подскажите как добавить заголовок h1 на главную страницу? — Решение;
  • У вас другой вопрос? — Если он поможет всем, а не только вам — добавляйте в комментарии и я решу его бесплатно. Если у вас индивидуальный случай — пишите в контакты, решу вопрос за деньги.

Не понимаете, как и где что нужно поменять в Opencart? Могу подсказать лично! Обращайтесь по контактам.

  • Денис Рудик

    сайт ложит(

    • Что конкретно пишет? Возможна проблема с синтаксисом. Могу помочь с установкой кода.

      • Антон Соколов

        Все работает , большое Вам спасибо за столь ценную информацию!

        • Спасибо 🙂 Перепроверял код — у меня тоже нормально работает))) Видимо, Денис где-то сделал ошибку в синтаксисе.

  • Fanis

    А на опенкарт 2 тестировалось?

    • На Opencart 2 не тестировалось! У меня уже есть магазин для тестов. Скоро отпишусь в этом посте по поводу быстрой оптимизации в новой версии.

    • Добавил информацию для Opencart 2.*

  • Александр Гриненко

    Спасибо, тебе добрый человек!!!

  • Nikita Gangeev

    Решение и правда максимально простое )
    Но хочу предостеречь тех, у кого какие-то дополнения используют Custom Title, как например SEO Pack Pro
    В custom_ttitle.xml лучше потереть строчки связанные с:
    document->setTitle($category_info[‘name’]);]]>
    зы по аналогии можно сделать и производителей

    • Это решение подходит для тех, кто не использует сторонних модулей 🙂 В индивидуальных случаях шаблонность могу я помочь натянуть на opencart или программист любой)

  • elm

    Спасибо, всё клево, все работает.)
    Интересно, а текст подобным образом можно генерить? например в стандартном поле «описание» у карточек или в текстовом поле категории

    • Конечно можно 🙂 делал генерацию шаблонного описания товаров

      • elm

        Можешь подсказать решение? реализация похожа на генерации тайтлов?
        я ковырял catalog/controller/product, но не нашел, как это сделать)

        • Нужно ковырять не catalog/controller/product, а catalog/VIEW/template/*/product/product.php

  • Игорь

    Кто сможет помочь с синтаксисом для OC2, не знаю правил для php(

  • Omarovich

    Роман. Вот проконсультируйте плиз. вот это [ссылка удалена]
    ЧПУ в админке включен. В браузере отображается как см. прикрепленную картинку. Чудеса)
    Опенкарт — 2.1.0.2

  • Omarovich

    Картинка в браузере

  • Omarovich

    Вот такая ссылка [ссылка удалена]

  • Omarovich

    В догонку. Проверил в IE показывает корректно, а в других браузерах нет. Что надо прописать и где. чтобы было корректное отображение в других браузерах?

  • Многие писали по поводу того, что в Opencart 2 не работает — оказалось — нужно просто обновить кэш! Не забывайте за это! Добавил соответствующую информацию в статью.

  • Brighton

    на ocstore 2.x надо чистить кэш, чтобы заработала генерация

  • Brighton

    на ocstore 2.x надо чистить кэш, чтобы заработала генерация

  • Вадим

    Подскажите как добавить заголовок h1 на главную страницу. Версия 2.1.0.1

    • Два способа.
      1: в шаблоне /view/theme/ваш_шаблон/template/common/home.tpl
      2: включить модуль «HTML код» и вывести на главной странице

  • Вадим

    Спасибо

  • romka911

    Спасибо вам! Вы очень помогли!

    • Не за что!)

      • romka911

        Единственное что — не получилось настроить мета-теги по шаблону на страницах категорий, но не сильно нужно, там ручками буду прописывать. OCstore 2.1.0.1.1

  • 12

    Добрый день, а покажите пожалуйста как еще вывести артикул то есть (Купить Монитор LG артикул 111111111111111111)

    $this->document->setTitle(«Купить {$product_info[‘name’]} «);

    • Пробуйте $this->document->setTitle(‘Купить’.$product_info[‘name’]}.’ артикул’.$this->data[‘model’]»);

      • 12

        Роман Спасибо у же разобрал имено так как ты написал

  • Andrey

    А что если у меня сайт на 3 языках и названия соответственно отличаются.

    • В таком случае мой метод в чистом виде вам не подойдет, нужно у программиста заказывать разработку соответствующего кода генерации

      • Andrey

        Спасибо за ответ, скачал один модуль, который не пошел SEO Mega Kit PLUS, но там для версий 2.0.х.х , а у меня 2.3.0.2 , поэтому в поисках другого решения 🙂

      • Александр Кириков

        Думаю, в этом случае нужно через переменные подтягивать фразы из языковых файлов.

  • Юрий

    Классная статья! Вопросик насчет картинок в description: а это вообще как? я сделал так как прописано у вас в статье, только галчки стали на весь экран показываться вместо шапки. так и должно быть?)))
    или что-тоне так? делаю через модификатор.
    И еще вопросик и предложение: хочу в description внести стоимость товара, на данном этапе акционную, но в идеале прописать логику что если есть акция то выводим акцию, если нет, то обычный прайс (пока не знаю как реализовать). Если вводи переменную $product_info[‘special’], то цена по акции появляется, но с четырьмя нолями после запятой: пример «3900.0000» нолики мне не нужны, выставлением в настройках валюты в админке не меняется. округление с помощью round($product_info[‘special’], 0) — ничего не полачается,….

  • Андрей

    меняю «setTitle» для товара — кириллица не выводится, в чем может быть проблема?

    • нужно разбираться конкретно с вашим случаем. может быть вы неправильно конкатенацию сделали

      • Андрей

        я не особо подкован, поэтому тестого целиком копировал вашу ссылку, результат можно на вложенной картинке посмотреть. Если же вместо «купить» писал «bye», то все отображалось. ,https://uploads.disquscdn.com/images/1db6c47ce08d8a8822b58d9ef261c45bee24448fdb65c1cc9a7e59402a5d892b.jpg

        • попробуйте поиграться с кодировкой файла (поменять на utf-8)

          • Андрей

            очень странно, вчера не удалось (я уже на vqmod грешил), а сегодня всё само заработало… огромное спасибо!

  • Владимир Крещенко

    Спасибо, автор. Это намного лучше всех модулей генерации! Правда, я немного изменил код, оставив возможность в будущем сделать лучше через админку или вручную.

    Может кому будет полезно такой вариант, тогда нужно свой шаблон указать в else, тогда сначала будут действовать прописанные в поле, а потом наша генерация:

    if ($category_info[‘meta_title’]) {
    $this->document->setTitle($category_info[‘meta_title’]);
    } else {
    $this->document->setTitle(‘★ ‘.$category_info[‘name’].’ купить в интернет магазине. Made in Ukraine!’);
    }

    Также получилось вставить emoji без указания урла картинки, прости символом.

    Хотел спросить, а можно таким способом прописать alt картинок? Где что нужно менять в коде?

    Заранее спасибо

    • alt картинок тоже можно так прописать. нужно в соответствующем контроллере создать переменку, добавить всю нужную информацию в эту переменку и в шаблоне уже использовать эту переменную в качестве ALT

  • Cinemarus Socom

    Роман, задумал так чтоб в титл выводилось то что я указал в карте товара и подставлялось имя товара

    $this->document->setTitle(‘Купить ‘.$product_info[‘meta_title’].’ имя’.$this->data[‘name’]);

    но выводит только первое, не подскажите как?

    • $this->document->setTitle(‘Купить ‘.$product_info[‘meta_title’].’ имя’.$product_info[‘meta_title’]); ???

    • $product_info[‘name’] — название товара

      • Cinemarus Socom

        я так тоже писал но почему то выводит до слова имя а дальше ничего

      • Cinemarus Socom

        $this->document->setTitle(‘Купить ‘.$product_info[‘meta_title’].’ имя’.$product_info[‘name’].’ в интернет магазине stellaru.ru’);

        выводит Купить футболка женская имя — а дальше не хочет гадина

        • странно, должно вывестись, попробуйте кэш еще раз обновить

      • Cinemarus Socom

        роман СПАСИБО за Ваш способ!! все получилось, обновил кэш в модификаторах, а что пишут в Мета-тег Keyword и Теги товара ?

  • Владимир Крещенко

    Как при такой реализации сделать разные шаблоны для разных языков, например русский и украинский?

    • В нужном контроллере вставить конструкцию
      $this->load->model(‘setting/setting’);
      $store_settings_config = $this->model_setting_setting->getSetting(«config», $this->config->get(‘config_store_id’));
      if $store_settings_config[‘config_language’] {
      $this->document->setTitle($product_info[‘meta_title’]); /* Тайтл по-умолчанию для языка по-умолчанию */
      }
      else {
      $this->document->setTitle($product_info[‘meta_title’]); /* Тайтл по-умолчанию для языка отличного от по-умолчанию, если он один такой */
      }

      Если не понятно, как применить код сверху к этой конструкции, могу индивидуально решить ваш вопрос не бесплатно

  • В нужном контроллере вставить конструкцию
    $this->load->model(‘setting/setting’);
    $store_settings_config = $this->model_setting_setting->getSetting(«config», $this->config->get(‘config_store_id’));
    if $store_settings_config[‘config_language’] {
    $this->document->setTitle($product_info[‘meta_title’]); /* Тайтл по-умолчанию для языка по-умолчанию */
    }
    else {
    $this->document->setTitle($product_info[‘meta_title’]); /* Тайтл по-умолчанию для языка отличного от по-умолчанию, если он один такой */
    }

    Если не понятно, как применить код сверху к этой конструкции, могу индивидуально решить ваш вопрос не бесплатно 🙂

  • Kirill Boguslavsky

    Всем привет, я тоже изменил мета теги все как в инструкции, и те слова что добавил все стали знаком вопроса? Решение так и не нашли я так понимаю?

  • Егор

    Добрый день, не получается сделать на >>> Версия ocStore 2.1.0.2.1 Или эта инструкция только для Opencart ? Мне нужно прописать для всех товаров. Подскажите как это сделать. Спасибо.

    • Эта инструкция подходит и для ocStore. Сбросьте в комментарии код строк setTitle, setDescription, который сейчас.

      • Егор

        Этот код взял с файла category.php (просто мне нужно прописать для товаров) а там есть еще файл product.php может для товаров нужно в нем прописывать?
        Вот часть кода, в оригинале category.php

        {

        if ($category_info[‘meta_title’]) {
        $this->document->setTitle($category_info[‘meta_title’]);

        } else {
        $this->document->setTitle($category_info[‘name’]);
        }

        Если можете на примере этого кода пропишите русские слова, а я потом вставлю что мне нужно.

        • if ($category_info[‘meta_title’]) {
          $this->document->setTitle($category_info[‘name’].’: купить недорого’);

          } else {
          $this->document->setTitle($category_info[‘name’].’: купить недорого’);
          }

          • Егор

            Скопировал вставил, но тег Title остается пустым (кеш почистил). У меня стоит deadcow SEO он может мешать таким телодвижениям?
            И вопрос не по теме, сделать ЧПУ, после добавления нового товара мне приходится заходить в этот модуль и нажимать обновить, что бы он генерировал ссылки и Мета-тег Keywords. Возможно это сделать автоматом?

          • Насчет deadcow seo не знаю — не пользуюсь. Поэтому сложно сказать про совместимость решения и deadcow.

          • Насчет deadcow seo не знаю — не пользуюсь. Поэтому сложно сказать про совместимость решения и deadcow

          • Егор

            Спасибо, разобрался. Все работает ок. Просто в админке все эти данные не видны, вот и думал что вношу изменения без толку, посмтрел html все ок. А модуль deadcow вообще отключил.

  • Юрий

    Огромное человеческое спасибо автору за дельный материал! Все отлично работает на ocStore 2.1.0.2.1
    Главное не забывать переименовывать ‘meta_title’ на ‘name’ ))

  • Денис Мартынов

    https://uploads.disquscdn.com/images/aeca94b5af9b0192831ea5b64acc87058a83a692c452a47db917fb3e5c4d1a52.png https://uploads.disquscdn.com/images/f2af270b7448c1b5974ebbd7efb81f95ea7c755ed4ad96be26d5f35688417656.png Добрый день, у меня ocStore, я прописал как в примере на опенкарт 2.х но получилось вот так

  • Илья Шинкаренко

    Спасибо Автору. А подскажите для этого сайта это применимо https://progress-way.com.ua/ ? Или лучше модуль искать? Спасибо

  • Korney Chervonenko

    можно ли добавить в meta description контактные телефоны в виде ссылки на записанные в конфигурации?

    • можно, не пробовал, но точно можно 🙂 для этого в теории нужно сделать следующее:
      1) в нужном контроллере добавить ПЕРЕД тайтлом и т.д. строку

      $data[‘telephone’] = $this->config->get(‘config_telephone’);
      Это сгенерирует переменную телефона
      2) Использовать переменную $telephone где угодно

      • Korney Chervonenko

        как вывести $telephone в setDescription?

        • нужно в указанный контроллер подгрузить контроллер страницы контакты и использовать переменную телефона из соответствующего контроллера

          • Korney Chervonenko

            хорошо бы Вы выложили строки кода для чайников

  • Владимир Цапков

    Вообще не обнаружил у себя $product_info , как тогда быть? версия oc store 2.1.0.2.1

    • Ищите, в этой версии Opencart всё по инструкции для второй версии подходит

  • Доброго времени суток. подскажите, как в вашем коде прописать шаблонные слова -= типа «интернет магазин Самый Лучший», а также вывести цену и категорию, к которой привязан товар.
    В идеале вот так примерно должно быть
    Производитель, Город, Страна, доставка, № объявления, цена, (цена), купить, (название магазина)
    для версии 1.5

  • Алексей Вырлан

    Добрый день. А как можно прописать массово все мета теги к уже существующим товарам? Сайт сделан на OcShop. Спасибо.

    • Добрый день! Это решение работает как раз для существующих (и впоследствии создаваемых) товаров.

      • Алексей Вырлан

        Спасибо за ответ. Это точно работает для поисковиков? Просто я смотрю что в редактировании категорий и товаров поля метатегов остаются пустыми.

        • В админке изменений не будет. Изменения видны только на страницах в коде. Админка берет свои данные из специальной таблицы базы данных. В случае моего решения данные из таблицы перестают браться и используются ваши данные (введенные в файле), что делает невозможным использование полей админки для этих тегов (всё введено в файле). Еще раз: проверяйте код страницы, а не админку!!!

  • Dmitry Sorokin

    Спасибо! Отличная статья! Вопрос: При использовании $product_info[‘price’] в description отображается 1000.0000 . Можно как-то убрать 5 последних знаков?

    • В настройках магазина нужно цену выставить без значений после запятой и эти изменения будут применены и для этой переменной

      • Dmitry Sorokin

        Если вы имеете ввиду настройки валюты, то это не помогло.

        • тогда, возможно, у вас нестандартные модули валютные стоят — должно было сработать. В таком случае вам может помочь программист — можете посмотреть здесь https://seokrem.com/team/