Делая шаблон для своего сайта, озадачился созданием «индивидуальных» мета-тегов «description» и «keywords» для каждой отдельной публикации и каждой статичной страницы, включая постоянно меняющуюся «домашнюю». В чём проблема? Да ни в чём, если следовать «обычному» решению вопроса: установить соответствующий плагин в WordPress, настроить его и пользоваться. Но мне нужно было простое и красивое решение :) Любой плагин нагружает «движок» WordPress’а, отчего время на генерацию страницы увеличивается. Усложнять код системы не хотелось. «А можно ли задать мета-теги для каждой страницы «стандартными» средствами самого WordPress’а?» — подумал я, руководствуясь принципом ТРИЗ — используй то, что под рукою и не ищи себе другое! — и начал искать нужную информацию. В итоге, америки я, наверное, и не открыл, но нашёл очень простой способ добавления нужных мне мета-данных «description» и «keywords», да и не только их!

Суть в следующем. В арсенале WordPress’а есть инструмент, который создавался исключительно для вставки метаданных (но другого свойства) в страницу/публикацию, называется он «Произвольные поля» / «Custom Fields». Это группа текстовых блоков, расположенных ниже окна редактирования:
Произвольные поля - Custom Fields в WordPress
В описании возможностей произвольных полей приводятся примеры с созданием малозначимых «фишечек» для публикаций, как то:

«Настроение: клёвое
Сейчас читаю: Буратино и Папа Карло
Слушаю: AC/DC
Погода: нелётная … »

:)

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

Что нужно сделать? Начнём с кода. Запрос на добавление метаданных в код страницы делается функцией:

get_post_meta($post_id, $key, $single); 

значения параметров в скобках:

$post_id — идентификатор публикации (числовое значение);
$key — ключевое слово или имя «ключа» (строковое значение);
$single — определяет, нужна ли нам в итоге строка либо массив (логическое значение true — строка или false — массив);

Метаданные HTML-страницы располагаются в самом её начале между тегами <head>…</head>. В шаблоне WordPress’а мета-теги, как правило, находятся в файле «header.php». Открываем его для редактирования, находим тег <meta> с атрибутом «name» и его значением «description» и внутри кавычек атрибута «content» вставляем значение-строку:

content=“<?php echo get_post_meta($post->ID, 'description', true); ?>

echo — языковая конструкция PHP, вставляющая полученные с помощью функции get_post_meta() данные в html-код страницы;

Далее находим мета-тег “keywords” и точно так же внутри кавычек атрибута «content» вставляем похожую строку (различие во втором параметре в скобках):

content=“<?php echo get_post_meta($post->ID, 'keywords', true); ?>

Если тегов <meta name=“description” content=“” /> и <meta name=“keywords” content=“” /> нет в заголовке страницы (что очень маловероятно, если Ваш блог создан на основе готового шаблона), то Вы просто создаёте их сами и проделываете вышеописанные действия. Сохраняем файл.

Переходим к редактированию публикации/страницы и обращаем внимание на произвольные поля. Если Вы не находите «Произвольных полей», возможно, они отключены по умолчанию. Как их «включить»? Спасибо за подсказку trayanz’у (смотрите его сообщение в комментариях ниже). Вверху страницы (справа) расположена вкладка «Настройка экрана», при нажатии на которую появляется дополнительная панель с настройками. Вы выбираете «Произвольные поля» (ставите «галочку») и на странице появляется панель с произвольными полями. Теперь мы с ними можем продолжить работу.

В группе «Добавить новое поле» в строке «Имя» вводим «description» (без кавычек), а в поле «Значение» пишем описание Вашей публикации для поисковых ботов:
Произвольные поля - Custom Fields - Добавление «ключа»
Обратите особое внимание на то, что если в описании Вы используете кавычки, то они должны быть только фигурными (или заменяйте из спецсимволами), но не такими — “…”! Иначе в html-коде документа возникнет ошибка и метаданные с описанием и ключевыми словами просто формально обрежутся первой попавшейся кавычкой.

Жмём на кнопку «Добавить произвольное поле» и — мета-описание уже в коде страницы! Просто?

Те же действия осуществляем для имени «keywords», но в поле «Значение» вводим ключевые слова через запятую (о правилах добавления описания и ключевых слов в метаданные страницы можно подробно прочитать, например, в «Руководстве по поисковой оптимизации для начинающих от Google»)

Теперь для всех последующих вновь создаваемых публикаций Вы можете добавлять мета-описания и метаданные ключевых слов, выбирая «description» и «keywords» из ниспадающего меню поля «Имя». Достаточно заполнить текстовый блок «Значение», нажать кнопку «Добавить произвольное поле» и — voila — страница уже содержит метаданные :)
Произвольные поля - Custom Fields - Выбор «ключа»
Есть один нюанс, который усложнит наш код на пару строк. Дело в том, что теперь для Вашей «домашней» страницы мета-описание и ключевые слова будут меняться и в точности соответствовать метаданным каждой новой публикации. Если Вас это не устраивает, то решение вопроса несложное :)

Смысл в следующем. Так как заголовок «header.php» используется в создании любой страницы шаблона (если, конечно, не предусмотрено иначе), то мы можем проверить, является ли текущая страница «домашней» и запросить только для неё придуманное описание и ключевые слова; для всех остальных страниц делаем запрос вышеприведённой конструкцией.

Мы воспользуемся уже готовой функцией описания Вашего блога/сайта, тем более, что это описание доступно для редактирования из консоли администратора (раздел «Параметры» > «Общие настройки» > текстовая строка «Краткое описание»). Возьмём его в качестве метаданных для значения «description». Код:

<?php
if (is_home()) : 
bloginfo('description');
else : 
echo get_post_meta($post->ID, 'description', true);
endif;
?>

Вышеприведённый код нужно вставить одной (!) строкой между кавычками атрибута content мета-тега description.

Для метаданных ключевых слов конструкция будет выглядеть сложнее, но не так как в примере:

<?php
if (is_home()) : 
?>
...
<?php
else : 
echo get_post_meta($post->ID, 'keywords', true);
endif;
?>

где вместо точек нужно вставить весь перечень ключевых слов через запятую в одну строку вместе с кодом (!), и тогда «масштаб» мета-строки станет виден невооружённым глазом. Дело в том, что ключевые слова для «домашней» страницы нам брать неоткуда, поэтому мы и записываем весь набор прямо в код. Громоздко, но не критично :)

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

В конце публикации хочу добавить, что функциональность «Произвольных полей» достаточна, чтобы применять их в самых разных ситуациях, не прибегая к дополнительным плагинам или нагромождая код системы. Я пользуюсь метаданными страницы, например, для подключения к ней «голосования» и «рейтинга» (хотя они и работают благодаря плагинам, но в этом случае другой альтернативы нет). Но, как говорят любители неожиданного финала, это уже совсем другая история :)





1 Star2 Stars3 Stars4 Stars5 Stars (голосов: 16, средний балл: 4,75 из 5 возможных)
Загрузка...



  1. Здравствуйте! Половину вроде бы сделал. НО не пойму куда вставлять код для описания сайта, домашней страницы. Подскажите, пожалуйста.
    Вставлять в header.php? В какое место?

    • Константин, здравствуйте. Да, всё верно: код вставляется в файл header.php между тэгами head (здесь символы разметки страницы не отображаются, поэтому, смотрите в описании выше).

  2. Valik:

    Вопрос: а функция get_post_meta пишет в итоге данные ТОЛЬКО в header.php или все-таки в произвольный header? просто у меня на сайте несколько разных страниц с разным header, в wordpress соответственно при редактировании страницы справа в списке указываю шаблон (Главная, Видео и т.п.), в итоге никаких данных в META — нет. Вернее, где используется основной header.php — есть, а где нестандартные — нет. Есть какие соображения по этому поводу?

  3. Юрий:

    Здравствуйте, всё работает нормально, только вот нет описания рубрик….сайт на вордпрессе, как добавить описание рубрик (архивов)??? А то когда открываешь рубрику и смотришь код, там в описании стоит первый пост…

  4. Стас:

    Скажите всё сделал вроде правильно но первое слово всегда выходит в кавычках??? Вот пример кода

  5. Владимир:

    Спасибо! Действительно, все заработало с первого раза.

  6. Николай:

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

  7. Владимир:

    Здравствуйте, подскажите пожалуйста, что делать если в используемой теме произвольные поля не предусмотрены, их просто нет. Существует ли способ их добавить, спасибо.

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

    • Они могут не отображаться по умолчанию в блоке «Произвольные поля», они просто не включены… Чтобы включить их отображение. необходимо сверху в правой части найти «Опции отображения», нажать и в открывшемся окне поставить галочку рядом с «Произвольные поля»- все должно появиться

  8. Виталий:

    Благодарю! Действенно. Вот только еще один нюанс: теперь для страницы «категории» мета-описание и ключевые слова будут меняться и в точности соответствовать метаданным каждой новой публикации. Как можно решить этот вопрос?

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

  9. Имя:

    Сергей, перелистал весь инет, столько всего написано, но полное говно (прошу прощения за мой французский:)) ) или не лепится никуда.

    Нельзя запустить сайт, не оптимизировав его! А эти ключевые и мета, стали камнем приткновения, потому что я навставлял в хэдер коды других «умных людей»)))
    Конечно я не с первого раза врулил, с третьего подхода, потому что ковырлся двое суток, но смотря на пояснения аналогичные Вашему, понимал, что тут все сделано как надо!

    Супер статья! Большое Вам человеческое спасибо!!!!!
    Чтобы я без Вас делал!
    Удачи и всего наилучшего!

  10. Денис:

    отличная информация. А не скажите как убрать из выкидывающегося списка имени в произвольном поле элемент, который я не использую? чтоб глазу не мешал а выкидывало только для выбора дискрипи и кей? Спасибо!

  11. Отличная статья, мне нравится, достойно.

  12. Спасибо автору, все работает, НО, есть одно НО: на моем сайте в сайтбаре выведен каталог, который имеет единый ID, но разные категории, к примеру два раздела каталога имеют адреса «http://site.ru/?page_id=5&category=4» и «http://site.ru/?page_id=5&category=5». Есть также меню, где разные разделы имеют разные ID. Проблема в том, что description и keywords привязываются к конкретному ID. В итоге у меня получилось, что любая страница каталога имеет description и keywords указанные последними, т.е. я первый раз назначил эти данные для одной записи, а открывая для редактирования вторую запись вижу, что она унаследовала описания от ранее редактированной записи. Как можно решить эту проблему? Спасибо заранее, если поможете, и спасибо за то, чем уже помогли.

    • Евгений, эту публикацию о «нестандартном» использовании произвольных полей я сделал просто с целью поделиться своим скромным «ноу-хау» :) Поэтому, извините, решать проблемы с написанием шаблонов — это не мой профиль :)

  13. Alex:

    Спасибо за решение. Реализовал у себя в блоге, но почему-то появился только дескрипшн, а кейвордса так и нет ((( В чем может быть проблема ???

    Спасибо.

    • Alex, внимательно пересмотрите код, скорее всего, это из-за ошибки, здесь всё работает :)

      • Alex:

        Вот хоть убейте, перепроверял по несколько раз проверял, в упор не вижу (((

        <meta name="description" content="описание главнойID, ‘description’, true); endif; ?>» />
        <meta name="keywords" content="ключи главнойID, ‘keywords’, true); endif; ?>» />

        Очень надеюсь на Вашу помощь.

  14. Masya:

    Я новичок =( и не могу найти о каких произвольных полях идет речь. Очень хочется сделать все, как описано! У меня только категории и тэги (в постах). При редактировании страниц вообще ничего нет. Может я не там ищу? Буду признательна за любую помощь!

    • Посмотрите внимательнее, под окном редактирования записи есть окно «Цитата», ниже «Отправить обратные ссылки», а под ним — «Произвольные поля» :)

  15. Почти ничего в этом не понимаю, но интересно попробовать. Если кто-то смог. то и у меня получится. Иду от интуиции.

  16. nomn:

    Спасибо. Информативно, просто, понятно, а главное — полезно. Использую на своем блоге.

  17. Dim:

    Интересный подход к решению задачи и просто и со вкусом. не часто встретишь подобного в основном все нагромождают ненужным количеством плагинов.

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

  19. Да вообще класс. Нравится мне когда без плагина!!!

  20. Зато там в коде есть интересныtй комментари:

    /* this is compatible with SEO plugins */

    /* Add the blog name. */

    /* Add the blog description for the home/front page. */
    Вобщем потерялась я((

  21. Не отобразился код в сообщении, как я и опасалась… Ну не знаю… Наверное итак понятно: у меня в кавыйчках атрибута content стоит уже абракадабра с Яндекса. Но кажется я весь мета-тег полностью туда этот и впендюрила… сама… значит, по идее, должен быть еще? Но найти не могу.

  22. Внимательно всё прочитала. Вроде поняла. А когда зашла в файл header, то обнаружила, что уже сама же и воткнула туда, куда Вы говорите, код, который мне дал Яндекс, чтобы добавить сайт в очередь на индексацию.

    Код выглядит вот так (наставила на всякий случай в коде значков &&, чтобы нормально отобразилось):

    И куда мне теперь совать код для ключевиков?

    • Код с ключевыми словами и описанием, как я изложил выше, вставляется между тэгами <head› … </head› в любое место, но по правилам — вместе с другими тэгами <meta›. Код Яндекса для индексации Вашего сайта — это другая «песня», одно другому не мешает :) Для оперативности, предлагаю решить вопрос по электронной почте :)

  23. большое спасибо было очень интересно прочитать

  24. Снова вернулся к вам на блог)) возникла проблема, содержимое тега description дублируется в теге keywords, хотя в режиме редактирования записей все нормально. В чем может быть проблема?

    • Виктор, проверьте, в обеих конструкциях get_post_meta(…) содержимое скобок должно быть разным, для описания — ‘description’, для ключевых слов — ‘keywords’. Давайте по @почте решим этот вопрос — так оперативнее (адрес есть на главной странице).
      P. S. Ошибку в тексте исправил :)

  25. Отличная статья руководство. Грамотное преподнесение информации. Все получилось с первого раза. Спасибо! :)

  26. глеб:

    У меня не получается
    вроде все просто
    заменил все как написал
    но в списке нету не дисрипшен ни кейвордс;(
    шо делать?:)
    самое главное где находится get_post_meta($post_id, $key, $single);
    я вставил в синг.php

    • Глеб, код нужно вставлять в файл header.php, перечитайте ещё раз внимательнее публикацию, сделайте как я изложил и у Вас всё получится :)

  27. классная статья. вставил себе в закладки. нашел вот такой плагин для вордпресса. вставил. Пробую. Еще до конца не протестировал, но возможностей в нем хоть отбавляй. вставляет все, что можно. Platinum SEO Plugin

Ваш комментарий для глеб

Нажимая кнопку «добавить комментарий» Вы соглашаетесь с политикой обработки персональных данных