SEO сайта, аудит, контент, копирайтеры, реклама

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

Сегодня, в меру своих сил и возможностей, расскажу про оптимизацию своего сайта для поисковых систем. Какими сайтами для проверки пользуюсь, что подправить в functions.php вашей темы, чтобы запись нормально смотрелась при репостинге в социальных сетях типа ВКонтакте и Facebook. Заодно поделюсь плагинами для ускорения работы сайта.

Плагины для WordPress

Начну с конца — плагины для WordPress. Их у меня установлено несколько: WP Super Cache, Autoptimize, Async JavaScript и EWWW Image Optimizer.

WP Super Cache

Плагин для кеширования страниц вашего сайта. Дело в том, что каждая страница в WordPress создается динамически при любом обращении. Динамическая страница каждый раз генерируется налету и лезет в базу данных. Этот плагин сохраняет сгенерированную страницу в кеш и отдаёт пользователю простой статический html файл, что экономит ресурсы сервера.

Ссылка для скачивания и установки: WP Super Cache.

Autoptimize

Простой и удобный плагин для объединения и минификации файлов JavaScript и стилей. В каждой вашей странице используется множество JavaScript и CSS файлов — от плагинов и темы. С помощью этого плагина (в идеале) у вас подключается всего два файла: один JavaScript и один CSS.

Ссылка для скачивания и установки: Autoptimize.

Async JavaScript

Плагин для выставления флажка defer для всех JavaScript файлов. В обычном случае браузер разбирает эти файлы последовательно, по мере обнаружения их в HTML коде. С этим флажком браузер откладывает парсинг файлов и занимается этим паралельно с загрузкой страницы.

Ссылка для скачивания и установки: Async JavaScript.

EWWW Image Optimizer

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

Ссылка для скачивания и установки: EWWW Image Optimizer.

Исправления functions.php вашей темы

В каждой теме WordPress есть файл functions.php, где происходит настройка темы и прочий тюнинг. Правильный подход для настройки своей темы — это написать свою с нуля или создать дочернюю и менять всё в ней, а по-хорошему создайте свой мини-плагин, где добавляйте всё это барахло, чтобы никак не зависеть от темы.

В этом файле у меня сделано добавление meta тегов для помощи поисковым системам и социальным сетям плюс небольшие вспомогательные фрагменты.

Мета-теги og:type, og: description, og:image, og:title

Добавление мета-тегов og:title, og:description, og:type, og:url, og:locale, og:image и description к посту. В качестве og:description и description берётся первые 55 слов из вашего поста. Эти теги помогают социальным сетям создавать предпросмотр страницы, если вы решите ею поделиться.

Исходный код

function b2k_og_meta() {
    if (!is_singular()) {
        return;
    }
 
    global $post;
    $description = esc_attr(wp_trim_words($post->post_content, 55));
 
    $tags = array();
    $tags['og:title'] = '<meta property="og:title" content="'.get_the_title().'"/>';
    $tags['og:description'] = '<meta property="og:description" content="'.$description.'"/>';
    $tags['og:type'] = '<meta property="og:type" content="article"/>';
    $tags['og:url'] = '<meta property="og:url" content="'.get_the_permalink().'"/>';
    $tags['og:locale'] = '<meta property="og:locale" content="'.get_locale().'"/>';
    $tags['description'] = '<meta property="description" content="'.$description.'"/>';
 
     $images = get_posts(array(
        'post_status'    => null,
        'post_type'      => 'attachment',
        'post_parent'    => get_the_ID(),
        'post_mime_type' => 'image',
        'order'          => 'ASC'
    ));
 
    if ($images) {
        foreach ($images as $img) {
            $url = wp_get_attachment_url($img->ID);
            $tags[$url] = '<meta property="og:image" content="'.$url.'"/>';
        }
    }
 
    echo implode("\n", $tags);
}
add_action('wp_head', 'b2k_og_meta');

Автоматический переход на страницу при поиске

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

Исходный код

function b2k_redirect_single_post() {
    if (is_search()) {
        global $wp_query;
        if ($wp_query->post_count == 1) {
            wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );
            die;
        }
    }
}
add_action('template_redirect', 'b2k_redirect_single_post');

Добавление ссылок на следующую страницу и предыдущую

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

Исходный код

function b2k_rel_next_prev() {
    global $paged;
 
    if ( get_previous_posts_link() ) { ?>
        <link rel='prev' href='<?php echo get_pagenum_link( $paged - 1 ); ?>' /><?php
    }
    else if (is_singular()) {
        $prev_post = get_previous_post(true);
        if (!empty($prev_post)) { ?>
            <link rel='prev' href='<?php echo get_permalink($prev_post->ID); ?>' /> <?php
        }
    }
 
    if (get_next_posts_link()) { ?>
        <link rel='next' href='<?php echo get_pagenum_link( $paged +1 ); ?>' /><?php
    }
    else if (is_singular()) {
        $next_post = get_next_post(true);
        if (!empty($next_post)) { ?>
            <link rel='next' href='<?php echo get_permalink($next_post->ID); ?>' /> <?php
        }
    }
}
add_action('wp_head', 'b2k_rel_next_prev');

Отключение страниц автора

Яндекс.Робот гораздо глупее робота от Гугла, поэтому в первую очередь он умудрился найти страницы вида https://адрес.сайта/что-то-там/evgenii.zhirnov/. Чтобы этого больше не происходило, страницы такого типа отключаются вот этим кодом.

Исходный код

function b2k_disable_author_page() {
    if (is_author() && !is_404()) {
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
        nocache_headers();
    }
}
add_action('template_redirect', 'b2k_disable_author_page');

Открывать все ссылки в новом окне

Не знаю, как вы, а я привык, чтобы все ссылки открывались в новом окне, поэтому обычно открываю их кликом средней кнопки мыши. Данный скрипт добавляет атрибут target="_blank" всем ссылкам на сайте.

Исходный код

function b2k_target_blank($content) {
    $content = preg_replace_callback(
        '/<a[^>]*href=["|\']([^"|\']*)["|\'][^>]*>([^<]*)<\/a>/i',
 
        function($m) {
            $url = $m[1];
            $desc = $m[2];
            return '<a href="'.$url.'" target="_blank" rel="noopener">'.$desc.'</a>';
        },
        $content);
 
    return $content;
}
add_filter('the_content', 'b2k_target_blank');

Полезные ссылки

CY-PR.com

Проверяет сайт целиком на предмет индексации разными поисковиками. После регистрации позволяет обновлять информацию каждые 24 часа.

Ссылка: CY-PR.com.

Reflex grid

С помощью reflex.css сделана тема на моём сайте, так что упомяну из благодарности. Это всего лишь файл стиля, который разбивает сайт на 12 виртуальных колонок. К примеру, центральная часть моей темы занимает 9 колонок на широком экране, правая часть — 3 колонки. При низком разрешении экрана, обе части занимают 12 колонок, на всю ширину экрана.

Ссылка на документацию: Reflex grid.

Постскриптум

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

За семь лет ковыряния своего блога немного стал разбираться в PHP, HTML, CSS и JavaScript. На самом деле, это несложно — попробуйте и всё у вас получится.

Дела админские на сервере

От безделья решил обновить операционную систему на сервере. Сайт находится на VDS, поэтому обновить операционку можно только удалив всё нахрен и поставить чистую систему.

Раньше стояла FreeBSD 9.3. Всем прекрасна, консольна и стабильна, но поддержка закончилась пару лет назад и все приложения были старенькие совсем. Обновить их нельзя, потому что система портов больше не поддерживает старые версии FreeBSD — компилятор поменяли с GCC на модный Clang.

Теперь стоит FreeBSD 10.3. Стало совсем круто: все приложения свежие, новенькие с патчами безопасности и всё такое.

На сервере приложений всего ничего, вот список:

  • nginx (веб-сервер)
  • php (язык программирования)
  • mysql (база данных)
  • bind (ДНС)

Почта ходит через гугл.

Вот эти четыре приложения и обеспечивают работу сайта. Круто, да? )

Заодно проверил систему резервного копирования. Состоит из трёх частей:

  • сохранение базы данных с помощью mysqldump
  • архивирование папок /etc, /usr/local/etc, /var/db/pkg
  • архивирование папки с wordpress

Работает архивирование и восстановление прекрасно, как и планировалось.

Меняем формат вывода плагина WP-PostRatings

Плагин WP-PostRatings использует функцию number_format_i18n() для вывода рейтинга в числовом виде, используя данные локали. В русском варианте цифры выглядят так: «Рейтинг статьи 4,80 из 5». Как программисту, мне неприятно было видеть запятую в виде разделителя и лишний ноль в конце. Хотя математически все соответствует русским стандартам.

Существует способ поменять формат вывода, но для этого придется править исходники плагина.

Процедура довольно простая: открываем файл wp-postratings/wp-postratings.php в редакторе плагинов. Находим такие строчки:

$value = str_replace("%RATINGS_MAX%", number_format_i18n($ratings_max), $value);
$value = str_replace("%RATINGS_AVERAGE%", number_format_i18n($post_ratings_average), $value);

И меняем функцию number_format_i18n() на number_format():

$value = str_replace("%RATINGS_MAX%", number_format($ratings_max, 1, '.', ''), $value);
$value = str_replace("%RATINGS_AVERAGE%", number_format($post_ratings_average, 1, '.', ''), $value);

После этой процедуры рейтинг будет выводится так: «Рейтинг статьи 4.8 из 5.0». Число в скобках означает количество цифр после запятой.

Какие я использую плагины для WordPress — 2

Пришло время обновить стаью «Какие я использую плагины для WordPress». С тех много воды утекло, я стал более опытным в программировании php/js/html. :) Некоторые плагины остались, появилось несколько новых, другие удалены за ненадобностью.

Akismet

Плагин для проверки комментариев к статьям на спам. На текущий момент на моем сайте заблокированно 13098 спам-комментариев. Идет в стандартной поставке WordPress. Категорически рекомендую его включать, иначе ваш блог, благодаря спамерам, моментально превратится в помойку.

Broken Link Checker

Плагин для проверки битых ссылок на вашем сайте. У меня он находится в выключенном состоянии и я его периодически включаю и запускаю проверку вручную. Выключен потому что тормозит админку WordPress.

Disable Emojis

Плагин для отключения новомодных смайликов, которые появились в версии WordPress 4.2. Причина отключения — графические смайлики не использую :)

Duplicator

Плагин для резервного копирования блога и его восстановления из резервной копии. Находится в выключенном состоянии. Периодически запускаю для создания слепка сайта. Откровенно говоря, ни разу не пользовался функцией восстановления.

FD Feedburner Plugin

Плагин для переадресации RSS потока на сайт feedburner.com. Хотя RSS, насколько я знаю, помаленьку отмирает.

FileBrowser

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

Google XML Sitemaps

Плагин для создания карты сайта sitemap.xml, который используется поисковыми роботами и ворами контента.

Heartbeat Control

Плагин для отключения лишних запросов к wp-admin/admin-ajax.php, которые лишний раз нагружают сервер.

Inline Javascript Plugin

Плагин для вставки рабочего фрагмента на языке JavaScript. Примеры можно посмотреть в статьях:

Jetpack от WordPress.com

Плагин Jetpack предоставляет собой набор различных функций для сайта. Лично я использую в нем модули для подключения Android приложения WordPress, статистики сайта и мобильной темы. Также позволяет связать свой автономный блог с сайтом WordPress. По итогам года рисует замечательную статистику: «Ежегодный отчёт от Jetpack».

LiveJournal Crossposter

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

Mail From

Плагин для формирования обратного адреса писем, которые рассылает WordPress.

P3 (Plugin Performance Profiler)

Плагин для проверки скорости работы других плагинов. У меня он находится в выключенном состоянии и периодически включается для проверки. Именно с его помощью выяснил, что Broken Link Checker тормозной.

Pagination Rel Links

Плагин для проставления ссылок на соседние страницы. Этим иногда пользуется браузер, чтобы жрать трафик заранее загружать страницы, на которые пользователь может пойти.

PHP Code Widget

Плагин для вставки PHP кода в виджет. Установлен исключительно для показа погоды YoWindow. Пример кода можно посмотреть в статье: «Добавил виджет с погодой от YoWindow».

Theme Check

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

Tools for blog2k

Плагин для различного функционала для моего блога. Грузит стили для мобильной версии, загружает Яндекс.Метрику и Google Analytics, переносит загрузку jQuery в конец страницы. Также позволяет вставлять спойлеры вот такого вида:

Как тебе новый детектив?
Убийца — садовник!

W3 Total Cache

Плагин для кеширования. Позволяет объединять все скрипты в один файл и стили. Оптимизирует работу с БД. Создает статические версии всех страниц сайта, что позволяет ускорить загрузку в несколько раз.

WordPress Popular Posts

Плагин для показа популярных страниц сайта. Использую его в виде виджета справа.

WP-PostRatings

Плагин позволяет пользователям проставлять рейтинг каждой заметки. Процесс установки подробно, с картинками описывается в блоге: Константина Хмелёва. На всякий случай себе голосовать запретил. Понравилась статья? Поставьте звездочку :)

WP-Syntax

Плагин для подсветки синтаксиса. В основном использую его в рубрике «Программирование» для подсветки различного кода на C/C++, JavaScript, PHP и так далее.

WP LaTeX

Плагин для отображения формул в формате LaTeX (E=mc^2). Если кто не знает — LaTeX читается по-русски как «ЛаТеХ» и никакого отношения к резиновому изделию номер два не имеет. :)

Yet Another Related Posts Plugin

Плагин показывает похожие страницы. Использую в виде виджета справа. Этот виджет отображается только во время просмотра статьи.

Блог Евгения Жирнова