Сегодня у меня спросили, зачем оптимизировать код темы и не достаточно ли будет оптимизации текстов на сайте?
Оптимизацию кода проводят с различными целями:
- для снижения количества запросов к базе данных и увеличения скорости формирования страницы (загрузки контента);
- для увеличения скорости загрузки изображений;
- И, наконец, для более быстрой индексации материалов сайта поисковыми системами.
Разумеется, в каждом из этих случаев требуется разная оптимизация.
В этом посте я расскажу, как оптимизировать код вашей WordPress-темы для лучшей индексации контента на вашем сайте поисковыми системами и, соответственно, более релевантной выдачи этого контента по запросам пользователей.
- Начнем Ab ovo - в буквальном переводе «с яйца», т.е. с самого начала. В нашем случае с мета-тегов.
Заголовок страницы TITLE - самый важный мета-тег, в который следует включать несколько ключевых слов, по которым вы хотите продвигать данную страницу. Чтобы автоматизировать процесс создания титлов, напишем следующее условие:
<title><?php if (is_single()) { ?> <?php wp_title(''); ?> | <?php bloginfo('name'); ?> | <?php bloginfo('description'); ?> <?php } elseif (is_category()) { ?> Рубрика: "<?php echo single_cat_title(); ?>" | <?php bloginfo('name'); ?> | <?php bloginfo('description'); ?> <?php } elseif (is_tag()) { ?> Страница тега "<?php single_tag_title(); ?>" | <?php bloginfo('name'); ?> | <?php bloginfo('description'); ?> <?php } else { ?> <?php the_title(); ?> | <?php bloginfo('name'); ?> | <?php bloginfo('description'); ?> <?php } ?> </title>Пояснение:
Если загружается single, т.е. одиночная запись, то title формируется так:
Название записи | Название блога | Описание блога
Для рубрик title будет выглядеть так:
Название рубрики | Название блога | Описание блога
Для страниц тегов title будет таким:
Название тега (т.е. ключевое слово, которое задает в поиск посетитель) | Название блога | Описание блога
Для все остальных страниц title будет одинаковым:
Название страницы | Название блога | Описание блога
Можно, конечно, написать условие, которое выдаст нам уникальный title буквально для каждой страницы нашего блога, но, как правило, приведенного выше кода вполне достаточно, чтобы в нашем title появились все необходимые ключевые слова, связанные с тематикой блога.
Заметьте, для этого нам не потребовалось никаких плагинов.
Естественно, в названии статьи нужно использовать ключевые слова для продвижения этой статьи, а в название сайта - включить ключевики для продвижения всего сайта.
Едем дальше: DESCRIPTION – описание сайта.
Мета-тег DESCRIPTION – используется в качестве сниппета в поисковой выдаче. Снипет – это кусочек текста, выбранный поисковиком для отражения сути вебстраницы. В поисковой выдаче снипет находится под ссылкой на сайт.
Создать уникальный description нам поможет следующий код:
<meta name="description" content="<?php if ( is_single() ) { echo 'Статья '; single_post_title('', true); } else { bloginfo('name'); echo " - "; bloginfo('description'); }?>" />Пояснение:
На странице одиночной записи, description будет создан из названия записи.
На всех остальных страницах он будет повторять описание сайта.Напоминание!
В description (описании сайта) обязательно должны использоваться ключевые слова из title (названия сайта).Мета-тег KEYWORDS: на данный момент этот тег не учитывается поисковиками, но все же, будет не лишним, если слова, отражающие суть страницы будут прописаны в keywords.
Автоматизировать создание тега KEYWORDS нам поможет условие:
<?php if (is_single()) { echo '<meta name="keywords" content="'; $post_tags = wp_get_post_tags($post->ID, array('fields' => 'names')); echo implode(', ', $post_tags); echo '" />'; } elseif (is_category()) { echo '<meta name="keywords" content="'; echo single_cat_title (); echo '" />'; } elseif (is_tag()) { echo '<meta name="keywords" content="Тег '; single_tag_title(); echo '" />'; } else { echo '<meta name="keywords" content=" Здесь будет перечень ваших ключевых слов" />'; } ?>Пояснение:
На странице одиночной записи, keywords будут создаваться из меток этой записи.
Для рубрик в качестве keywords этот код будет выдавать название рубрик.
Для страниц тегов - название тега.На всех прочих страницах будет загружаться стандартный список ключевых слов, который вы может вставить в вышеприведенный код вместо фразы “Здесь будет перечень ваших ключевых слов”.
Мета-тег ROBOTS — предназначен для запрета или разрешения индексации поисковиками страниц сайта. Он полезен для SEO оптимизаторов и просто тех, кто хочет избавиться от дублированного контента. При помощи данного тэга можно самостоятельно управлять индексацией страниц.
Разрешить индексацию:
<meta name="robots" content="index, follow" />
Запретить индексацию:
<meta name="robots" content="noindex, nofollow" />
- Атрибут Rel="Canonical"
Если ваш сайт имеет зеркала, используйте на основном сайте Rel="Canonical", это позволит указать тот URL, который должен появиться в выдаче поисковой системы.
Как пользоваться этим атрибутом?
Добавьте в раздел <head> вашего основного сайта элемент <link>:
<link rel="canonical" href=”http://www.example.com/” />
- Расположение основных блоков на сайте:
Вывод основных блоков необходимо организовать в следующем порядке:
1. Шапка сайта.
2. Контент.
3. Сайдбар.
4. Футер.При такой организации текст постов будет располагаться ближе к началу страницы.
Напомню, что поисковики считают наиболее релевантным контент, который находится ближе к началу документа (имеется в виду исходный код документа, который можно увидеть, вызвав контекстное меню страницы кликом правой клавиши мыши и выбрав в нем «Исходный код страницы»).
Поэтому, да здравствуют темы с правосторонним сайдбаром!
Но, если вы предпочитаете иметь сайдбар слева, это не проблема. Главное, чтобы в коде он находился после контента, а визуально его можно расположить где угодно.Увидеть ваш сайт глазами поискового робота можно на сервисе http://www.seo-browser.com
- Заголовки, используемые на сайте:
Правильно используйте теги заголовков, особенно теги h1.
Именно они позволяют ПС легче ориентироваться в тематике страницы и сайта, а так же используются Яндексом для составления быстрых ссылок в СЕРПЕ. Поэтому, рекомендуется использовать тэг h1 как заголовок страницы, содержащий в себе ключевые слова (слово).Это значит, что заголовок поста в файле single.php нужно поставить в теги h1.
Вот так:
<h1>Это заголовок поста</h1>
Все заголовки постов во всех других файлах нужно поставить в теги h2.
Напомню, что на странице записи заголовок поста отображается в мета-теге title (смотрите п.1).
В заголовке должны присутствовать ключевые слова, по которым продвигается данная страница.
Напомню, что на странице записи заголовок поста отображается в тегах title (смотрите п.1).
Наличие одинаковых фраз/слов в title и в h1 значительно повышает вероятность попасть в топ выдачи поисковых систем по ключу из title без использования внешних факторов ранжирования, только за счет внутренней оптимизации.Хотя использование тегов заголовков внутри поста происходит уже при написании поста и к оптимизации кода wordpress-темы не относится, я, все же, упомяну об этом: Все заголовки внутри постов, а также заголовки разделов сайдбара/футера берем в теги h2. Вот так:
<h2>Это заголовок внутри поста и заголовок раздела в сайдбаре</h2>
В h2 вставляем видоизмененные ключевые слова.
Теперь об использовании тега strong.
Выделение в тексте ключевых слов жирным или полужирным шрифтом хотя и имеет незначительный вес в SEO оптимизации, но все же пренебрегать им не стоит.
Все подзаголовки внутри постов берем в теги strong. Вот так:
<strong>Это подзаголовки, которые содержат ключевые слова из названия и тематики блога </strong>
Чтобы удобно вставлять в страницу теги strong с ключевыми словами, их нужно "зашить" в шаблон.
Например, вместо стандартной ссылки "Читать далее" под анонсами постов написатьЧитать далее продолжение поста <strong>Заголовок поста</strong>.
Для WordPress это будет выглядеть так:
Читать далее продолжение поста <strong><?php the_title(); ?></strong>
Вот еще один способ (нашла на сайте http://www.terehoff.com):
Можно вставить перед формой комментариев следующую фразу:«Хотите оставить комментарий к посту/статье <strong>Заголовок поста</strong>»?
Для WordPress аналогично:
Хотите оставить комментарий к посту/статье <strong><?php the_title(); ?><strong>?
Поскольку, заголовок поста состоит из ключевых слов, используя его таким образом, вы повышаете процент ключевых слов на странице.
Можно, также, добавить несколько самых важных ключевиков в этих тегах в футер вашего сайта.
Используйте подобные выделения ключевых слов не больше одного раза на странице.
Для выделения ключевиков можно использовать, также, Курсив или Подчеркивание
— последнее время выделение ключевых слов курсивом или подчеркиванием имеет гораздо большую взаимосвязь с ранжировкой страницы, чем при выделении текста жирным или полужирным шрифтом.
- Другие способы встроить в шаблон ключевые слова (или их синонимы):
Обязательно прописывайте атрибуты ALT и TITLE для тега картинок IMG - и включайте в них ключевые слова, по которым ваш вебсайт может быть найден в поиске по картинкам Яндекса или Google.
Атрибут Alt — Удивительно, но ранее считалось, что атрибут Alt почти не имеет значения для SEO, а ведь наличие этого атрибута имеет устойчивую связь с высоким ранжированием в поисковых системах. Более того, тег Alt позволит получить дополнительный трафик с сервисов поиска картинок Яндекса и Гугла.
Атрибут Title тоже не помешает, так как появляется в браузере в виде подсказки при наведнии указателя мышки на картинку.
Заполняйте оба эти атрибута при вставке изображений, при этом можно сделать их разными (хотя это И не обязательно).
Если вывод изображений в вашей теме «зашит» в шаблоне, например, при выводе из произвольных полей, можно организовать добавление атрибутов alt и title автоматически. Например, так:
<a href="<?php the_permalink() ?>"> <?php $image = get_post_meta($post->ID, 'thumbnail ', true); if($image !== '') { ?> <img src="<?php echo get_post_meta($post->ID, "thumbnail ", true); ?>" title="<?php the_title(); ?>" alt="<?php the_title(); ?>" /> <?php } ?> </a>Здесь в качестве значений атрибутов ALT и TITLE будет выводиться название поста, в котором опубликованы эти изображения.
- Добавьте на сайт «Хлебные крошки»
Зачем нужны «Хлебные крошки»?
Во-первых: это дополнительная навигация, повышающая юзабилити Вашего сайта и помогающая пользователю сделать наименьшее количество кликов от Главной до целевого URL.
Во-вторых: добавляя «Хлебные крошки» на страницу каждой вашей статьи, вы получаете дополнительную перелинковку страниц - ссылку на категорию, в которой находится статья и на главную страницу.
Для реализации «Хлебных крошек» можно воспользоваться кодом, который я выложила в статье Хлебные крошки без плагинов.
- Избавьтесь от неуникального контента
В WordPress существует такое понятие, как таксономия, т.е. контент дублируется несколько раз: в категориях, тегах и архивах по датам.
Чтобы на вашем сайте не было повторяющегося контента, выберите одну таксономию (иерархию, упорядочивание) и придерживайтесь ее в дальнейшем. Тщательно подумайте, что Вам нужнее. Например, архивы по датам актуальны для периодических изданий, например, электронных журналов.
Для SEO оптимальными являются только теги и категории. Что использовать вам – полностью зависит от специфики вашего проекта и его аудитории.
На практике это значит, что вам нужно разрешить индексировать только один тип контента: либо архивы, либо теги, либо категории.
Удалите из вашей темы коды, принадлежащие остальным, неиспользуемым вариантам. Например, если вы выбрали индексировать только рубрики, удалите или поставьте в теги noindex вывод архивов и облако тегов в сайдбаре.
Запретите в файле robors.txt индексацию архивов по дате и по тегам.
User-agent: * Disallow: /archives/date/ Disallow: /archives/tag/
Проследите, чтобы в этом файле были указаны ссылки на архивы и теги, используемые на вашем сайте.
- Отключите авторские архивы
Даже если на своем сайте вы единственный автор, WordPress автоматически создает авторские архивы, в которых хранятся все ваши записи. Авторские архивы очень удобны на мультипользовательских блогах, но на блогах с одним автором они бесполезны, поэтому запретите их индексацию в robors.txt:
Disallow: /archives/author/
Кстати, наличие дублирующегося контента – основная причина попадания сайта под фильтр Яндекса АГС-17.
- Используйте теги noindex, nofollow для страниц, не представляющих ценности.
Например для страниц результатов поиска и др.
Noindex, nofollow означает, что поисковые машины не будут индексировать эти страницы, но следовать по ссылкам на них будут.
- Каждая статья должна содержать ссылки на тематические, похожие статьи
Отличным способом удержать читателя и поискового робота на страницах Вашего сайта является добавление на страницы записей блока ссылок на похожие тематические статьи.
Можно сделать даже два таких блока: «Статьи на эту же тему (или из этой же рубрики)» и «Самые читаемые статьи» (код самых читаемых статей я нашла на сайте http://wp-kama.ru).
Вот так можно вывести статьи из той же рубрики:
<div id="block"> <?php $main_post = $post; $categories = get_the_category(); $del_post = $post->ID; foreach ($categories as $category) : ?> <h5>Больше из этой рубрики:</h5> <?php $posts = get_posts('numberposts=5&category='. $category->term_id. '&exclude='.$del_post); foreach($posts as $post) : ?> <ul> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> </ul> <?php endforeach; ?> <?php endforeach; ?> <?php $post = $main_post; ?> </div><! -- End block -->Чтобы вывести самые читаемые статьи сначала нужно посчитать количество посещений каждой страницы. Для этого добавьте в файл functions.php следующий код:
<?php /* Подсчет количества посещений страниц */ function kama_postviews() { /* Настройки */ $meta_key = 'Просмотров'; // Ключ мета поля, куда будет записываться количество просмотров. $who_count = 1; // Чьи посещения считать? 0 - Всех. 1 - Только гостей. 2 - Только зарегистрированных пользователей. $exclude_bots = 1; // Исключить ботов, роботов, пауков, тараканов и прочую нечисть =)? 0 - нет, пусть тоже считаются. 1 - да, исключить из подсчета. /* СТОП настройкам */ global $user_ID, $post; if(is_single() || is_page()) { $id = intval($post->ID); $post_views = intval(get_post_meta($id,$meta_key, true)); $should_count = false; switch(intval($who_count)) { case 0: $should_count = true; break; case 1: if(intval($user_ID) == 0) $should_count = true; break; case 2: if(intval($user_ID) > 0) $should_count = true; break; } if(intval($exclude_bots) == 1 && $should_count) { $useragent = $_SERVER['HTTP_USER_AGENT']; $notbot = "Mozilla|Opera|Dillo"; // Chrome|Safari|Firefox|Netscape|Осел и другой зоопарк =) - все равны Mozilla $bot = "Bot/|robot|Slurp/|yahoo"; //Исключения. Роботы иногда как Mozilla представляется if ( !preg_match("/$notbot/i", $useragent) || preg_match("!$bot!i", $useragent) ) $should_count=false; } if($should_count) if( !update_post_meta($id, $meta_key, ($post_views+1)) ) add_post_meta($id, $meta_key, 1, true); } } add_action('wp_head', 'kama_postviews'); ?>Внутри функции есть настройки: название ключа у произвольного поля, кого считать и исключить ботов или нет.
/** Функция для вывода самых читаемых записей */ Параметры передаваемые функции (в скобках дефолтное значение): num (10) - количество постов. key (Просмотров) - ключ произвольного поля, по значениям которого будет проходить выборка. order (DESC) - порядок вывода записей. Чтобы вывести сначала менее просматириваемые устанавливаем order=1 format(0) - Формат выводимых ссылок. По дефолту такой: ({a}{title}{/a}). Можно использовать, например, такой: {date:j.M.Y} - {a}{title}{/a} ({views}, {comments}). cache (0) - использовать кэш или нет. Варианты 1 - кэширование включено, 0 - выключено (по дефолту). echo (1) - выводить на экран или нет. Варианты 1 - выводить (по дефолту), 0 - вернуть для обработки (return). Пример вызова: kama_get_most_viewed("num=5 &key=views &cache=1 &format={a}{title}{/a} - {date:j.M.Y} ({views}) ({comments})"); */ function kama_get_most_viewed($args=''){ parse_str($args, $i); $num = isset($i['num']) ? $i['num']:10; $key = isset($i['key']) ? $i['key']:'Просмотров'; $order = isset($i['order']) ? 'ASC':'DESC'; $cache = isset($i['cache']) ? 1:0; $echo = isset($i['echo']) ? 0:1; $format = isset($i['format']) ? stripslashes($i['format']):0; global $wpdb,$post; $cur_postID = $post->ID; if ($cache){ $cache_key = (string) md5( __FUNCTION__ . serialize($args) ); if ( $cache_out = wp_cache_get($cache_key) ){ //получаем и отдаем кеш если он есть if ($echo) return print($cache_out); else return $cache_out; } } $sql = "SELECT p.ID, p.post_title, p.post_date, p.guid, p.comment_count, (pm.meta_value+0) AS views FROM $wpdb->posts p LEFT JOIN $wpdb->postmeta pm ON (pm.post_id = p.ID) WHERE pm.meta_key = '$key' AND p.post_type = 'post' AND p.post_status = 'publish' ORDER BY views $order LIMIT $num"; $results = $wpdb->get_results($sql); if (!$results) return false; $out= ''; preg_match ('!\{date:(.*?)\}!',$format,$date_m); foreach ($results as $pst){ $x == 'li1' ? $x = 'li2' : $x = 'li1'; if ( (int)$pst->ID == (int)$cur_postID ) $x .= " current-item"; $Title = $pst->post_title; $a1 = "<a href='". get_permalink($pst->ID) ."' title='{$pst->views} просмотров: $Title'>"; $a2 = "</a>"; $comments = $pst->comment_count; $views = $pst->views; if ($format){ $date = apply_filters('the_time', mysql2date($date_m[1],$pst->post_date)); $Sformat = str_replace ($date_m[0], $date, $format); $Sformat = str_replace(array('{a}','{title}','{/a}','{comments}','{views}'), array($a1,$Title,$a2,$comments,$views), $Sformat); } else $Sformat = $a1.$Title.$a2; $out .= "\n<li class='$x'>$Sformat</li>"; } if ($cache) wp_cache_add($cache_key, $out); if($echo) return print $out; else return $out; } ?>Эту функцию также добавляем в файл functions.php.
А дальше в файл single.php после вывода контента вставляем:
<h3> Самое читаемое </h3> <ul> <?php kama_get_most_viewed("num=5&format={a}{title}{/a} ({views})"); ?> </ul> - Добавляем на каждую страницу блок ссылок на другие страницы сайта.
Ту же самую функцию, которую мы выполнили для записей, теперь можем сделать и для страниц:
<div id="block"> <h4>Еще с сайта</h4> <ul> <?php wp_list_pages('title_li=&depth=1&exclude=,'.$post->ID); ?> </ul> </div><! -- End block -->
Вот и все! Теперь код вашей WordPress-темы полностью оптимизирован.
P.S. Не забудьте отключить плагины wp-seo, All in One SEO Pack и подобные им!
P.P.S. Еще одно небольшое дополнение: все мои премиум-темы оптимизированы по описанному выше способу и не требуют плагинов для оптимизации.







Ксана, спасибо за такой материал, частично оптимизировала свой блог. Волнует ещё вопрос внутренней перелинковки в постах. Можно ли как то сделать, чтобы не вручную перелинковывать статьи? Или может вы знаете для этих целей хороший плагин?
Заранее спасибо!
Плагина не знаю, хотя таких должно быть много.
Для перелинковки я делаю на странице записей блок "Еще с сайта" или "Еще на эту тему".
Читайте об этом выше.
Ксана, спасибо за ответ. Но интересуют не "Ещё с сайта" или что-то подобное в конце статьи, а именно перелинковка в самом тексте, то есть когда в статье находятся необходимые ключи и ставятся ссылки на рубрики, метки или же другие статьи. Или это уже лишнее?
ЗЫ: Ксана, спасибо за полезные материалы, всегда с удовольствием читаю Ваши новые посты!
Кажется видела подобную возможность в плагине Simple Tags.
Очень хорошие древовидные комментарии. Очень нравятся! Ксана, Вы могли бы мне такие сделать?
Миша, конечно могла бы. Позвони мне, обсудим.
Вы молодец! собрали в одном посте почти все рекомендации.
У меня вопрос - некоторые темы выводят на главной тег Н1 в названии блога, в названиях поста и т.д. Получается на главной несколько Н1. Также при переходе на пост название блога остается в Н1 и название поста также Н1. Подскажите как реализовать, хотя бы на примере моего блога, плиз
Я вывожу название блога логотипом-картинкой, которую делаю ссылкой на на Главную страницу блога.
Т.о. тег H1 используется только в названии постов.
Хотя, я не считаю, что использование нескольких тегов H1 на странице это большая ошибка.
Если код в теме оптимизировать хотя бы на 80% это уже хорошо.
Добиться 100% оптимизации все одно мало кому удается.
Спасибо за ответ! Мне на одном из блогов удалось 100% оптимизировать, но там позволяла тема это сделать. А на своем поковырялся и все никак
Вы говорите "Я вывожу название блога логотипом-картинкой, которую делаю ссылкой на на Главную страницу блога."
Это дает какие преимущества в оптимизации или же просто весьма оригинальный дизайнерский прием?
Аарон, это не дает преимуществ в оптимизации, но и минусов у этого тоже нет.
Это просто способ вывести логотип.
Ксана - ты молодец. Отличный пост, обоснованный, информация разжёванная.
Вопросов при прочтении не возникает. Побольше бы таких сайтов. Добавил сайт в закладки.
Спасибо, Ксана! Ваш сайт нашла всего несколько дней назад... Столько полезной информации! Пробую использовать ваши рекомендации, надеюсь на хороший результат
Подписалась на вашу ленту.
Спасибо. возможно неумный вопрос, а как бы научиться, что почитать? дабы задавать поменьше неумных вопросов?
Прочитайте выше опубликованный пост и сделайте все то, что в нем написано.
Если захотите узнать об этом больше, спросите google - в интернете можно найти всю нужную информацию по всем важным для сайта вопросам.
А научиться можно только практикуясь.
Можете еще почитать форумы о wordpress - там масса готовой информации: http://forum.maxsite.org/, http://mywordpress.ru/support
В самом начале статьи Вы написали "Для рубрик title будет выглядеть так:
Название рубрики | Название блога | Описание блога"
В каком файле вы предлагаете сделать эти изменения
В файле header.php, разумеется.
Аарон, вы меня уже слегка замучили вопросами.
В рунете существуют два отличных форума по WordPress:
http://forum.maxsite.org/
http://mywordpress.ru/support
Там есть ответы на многие ваши вопросы.
Ksana, я понимаю вас, но если бы на этих форумах, я получил бы ответы на эти и многие другие вопросы, я бы вас не беспокоил.
Да там давно есть ответы на все вопросы по WordPress.
Просто читайте форум.
Подскажите, пожалуйста, одну простую вещь - как вы выводите код? Я пытаюсь опубликовать код своего баннера на странице, но сайт воспринимает его все равно как графический объект. Теги code и pre не помогают...
Плагин WP-Syntax.