Изменение Title и Description SEO-плагинов WordPress

изменение Title и Description средствами php

В некоторых редких случаях в WordPress нужно автоматически менять (или добавлять что-то) в Title и Description. Например менять год в заголовке статьи. Так она будет всегда актуальной. Допустим "Как установить плагины в Wordpress [год]" И вместо [год] будет подставляться 2016, 2017 и т.д. Вставлять значения пользовательских полей.

Так как большинство веб-мастеров используют два плагина All in One Seo и Yoast, то рассмотрим на их примере.

Изменение заголовков и описаний с помощью пользовательских полей (Custom fields) в Yoast Seo

Тут на самом деле всё просто. Разработчики предусмотрели возможность вставлять шаблоны метаописаний.

Например их можно задать в шаблоне плагина (version - имя пользовательского поля):

пользовательские поля в Yoast SEO

Полный список шаблонов на официальном сайте плагина:

https://kb.yoast.com/kb/yoast-wordpress-seo-titles-metas-template-variables/

Изменение заголовков и описаний в All in One Seo средствами PHP и

Custom fields

По-умолчанию в данном плагине это сделать не так-то просто. Никаких встроенных инструментов плагин не даёт. Придётся применять php-сниппеты.

Используем исходную информацию по плагину http://4coder.info/en/blog/2011/all-in-one-seo-pack-customization/

Начнём с простого. Допишем в конец тайтла всех записей какое-то слово (например World!):

add_filter('aioseop_title_page','my_custom_title');
global $post;
function my_custom_title($text) {
$mytext = 'World!'; //задаём свой текст
$text .= $mytext; //"склеиваем" исходный Title и свой текст
return $text; //выводим текст
}

 (данный сниппет нужно добавлять в файл Function.php).

Тоже самое делаем для Description:

add_filter('aioseop_description','my_custom_description');
 global $post;
 function my_custom_description($text) {
 $mytext = 'World!'; //задаём свой текст
 $text .= $mytext; //"склеиваем" исходный Description и свой текст
 return $text; //выводим текст
 }

Теперь допишем в конец описания значение какого-нибудь пользовательского поля (custom fields). Если это сайт про онлайн-игры, то в пользовательское поле можно вписать номер версии игры и просто меняя номер версии при редактировании записи, менять её везде - в заголовке, описании, тексте поста и т.д.

Допустим Title  "Скачайте игру Покемоны версия <тут подставляем версию>"

И Description "На нашем сайте вы всегда можете скачать Покемоны <тут подставляем версию>"

Пример для описания:

add_filter('aioseop_description','my_custom_description');
global $post;
function my_custom_description($text) {
$mycustomseo = get_post_meta($post->ID, 'my_custom_field', true);//получаем значение пользовательского поля my_custom_field
$text .= $mycustomseo; //"склеиваем" исходный Description и пользовательское поле
 return $text; //выводим текст
}

Изменение сеозаголовков и описаний All in One Seo + Woocommers

Прежде всего почему мы используем связку All in One Seo + Woocommers? Потому что он уже был установлен на сайте. Хотя в Yoast проблема добавления пользовательских полей в описание решается намного проще и выше описана.

Так как в Woocommers не записи, а товары, то в сниппете нужно использовать не $post, а $product.

add_filter('aioseop_description','my_custom_description');
global $product;
function my_custom_description($text) {
$mycustomseo = get_the_terms($product->ID, 'pa_my_custom_field');//получаем значение пользовательского поля my_custom_field
$text .= $mycustomseo; //"склеиваем" исходный Description и пользовательское поле
 return $text; //выводим текст
}

Конкретный пример. Был сайт по продаже контрольных работ. В каждой контрольной были разные варианты и покупатель мог выбрать какой именно вариант контрольной он хочет купить. Естественно это был один товар и его Title выглядел примерно так:

"Контрольная по математике для 1 курса варианты 01, 03, 12"

Товаров таких было много, варианты постоянно добавлялись и было необходимо оперативно менять эти варианты сразу в тексте-описании, заголовке и сео-описании. Так как значения вариантов хранились в пользовательском поле 'variant' был составлен сниппет переписывающий заголовок:

add_filter('single_post_title','my_custom_product_title');
global $product;
function my_custom_product_title($text) {
$versionvalues = get_the_terms( $product->id, 'pa_variant');
if (!empty($versionvalues))
{
$mycustomseo = ' Вариант ';
$end_element = array_pop($versionvalues);//изымаем последний элемент, присваиваем его значение переменной
foreach ( $versionvalues as $versionvalue)
{
$mycustomseo .= $versionvalue->name; $mycustomseo .= $versionvalue->value;// делаем что-либо с первыми...
$mycustomseo .= ', ';
}

$mycustomseo .= $end_element->name; $mycustomseo .= $end_element->value; // делаем что-либо с последним элементом...

}

$text .= $mycustomseo;
return $text;
}

Здесь мы записываем исходный title в переменную $text, получаем массив значений всех вариантов $versionvalues, потом изымаем из него последний элемент $end_element (после него не нужна запятая) и в цикле foreach склеиваем это всё в одну строку, проставляя пробелы и запятые.

Влияют ли ссылки на позиции сайта в Google?

Очень часто веб-мастера задаются вопросом "почему мой сайт не растёт в Google"? Ситуация типичная, достаточно просмотреть сеофорумы. Они завалены вопросами и советами: "покупать или нет ссылки?", "какие доноры?" и т.д. и т.п. Тут как тут сразу резвые специалисты по прогону сайта хрумером, по профилям, статейным прогонам. Они обещают увеличение видимости в поисковых системах, позиции, ТОП и т.д. Ссылочки, которые они предлагают мягко говоря невысокого качества. Кто делает на этом бизнес, без обид, говорю как есть.

Решил заказать прогон для сайта, который не хотел "любить" Гугл.  Хотелось побыстрее, чтобы не думать, не перебирать сайты... Но сразу возник вопрос: "А есть ли вообще зависимость между количеством говноссылок на сайт и позициями?" Проверим!

Пациент 1: игровой сайт типа "скачать мод для ...", домен RU, возраст 1 год 6 месяцев, в индексе Google 261 страница, посещалка в пиковые дни 2,5к.

Трафик: 95% из Яндекса, немного из соцсетей, остальное Google, Mail.ru.

Ссылочное: 5 ссылок в SAPE, несколько публикаций в каталогах статей типа subscribe.ru, прогон по сервисам тестирования, из описаний роликов на YouTube, со всяких ГС которые спарсили контент сайта прямо со ссылками и несколько естественных ссылок оставленных пользователями. Как видим ссылочным серьёзно не продвигался.

Проанализируем зависимость "Количество ссылок - Позиция в ТОП".

Заходим в Google Search Console и выгружаем в Excel ТОП страниц по позициям. Как видно по некоторым нет трафика, но это и не важно. Мы будем определять как ссылки влияют на позиции, а не на трафик. Трафик это отдельный разговор. Итак:

Анализ поисковых запросов в Гуглвебмастер

 Затем заходим Ссылки на ваш сайт - Все страницы, на которые ссылаются и выгружаем ТОП страниц по ссылочному:

Анализ ссылок в Гугл веб-мастере

Теперь создаём файл EXCEL, немного волшебства и формул и, в результате, можем сравнить столбец URLов из ТОП в поиске и столбец URLов с самым большим количествам ссылающихся доноров (кто в теме - рассчитываем коэффициент корреляции, ф-ия =КОРРЕЛ( )):

Зависимость позиций в поиске Google и количества ссылок на страницу

И что же мы видим? Коэффициент 0,095 (напомню, полная корреляция это 1). Это можно сказать вообще ничего. Никакой корреляции. Т.е. совсем. Т.е. все эти ссылки никак не повлияли на ранжирование, а страницы в ТОП оказались по каким-то другим факторам (текст, соц.сигналы, что-угодно, но не ссылки).

Пациент 2. Сайт на туристическую тематику, домен COM, Возраст 3 года. Трафик 50/50 Яндекс и Гугл

Ссылочное: Этот уже сознательно проганялся по профилям (безанкорные ссылки) + похожие ссылки (писал здесь), как у первого сайта. Прогон был год назад. После него все 1000 ссылок я равномерно (по 10 шт/сутки)  прогнал через твиттер аккаунты. На это ушло около 3х месяцев. Они появились в Я.вебмастере и Гугл веб-мастере. Было ТИЦ +10. Потом многие повыпадали. В итоге, когда я проверял их недавно, то из 1000 осталось около 100, т.е. примерно 10%. Визуально в статистике LI был виден всплеск посещаемости с Яндекса и Гугл уже через пару недель после прогона. Вроде бы как есть эффект, но .... Провёл тот же анализ - коэффициент корреляции с количеством ссылок - 0,014. Опять ниочём.

Анализируя такие данные вывод напрашивается один - профили, сервисы анализа и прочие бесплатные источники ссылок для ранжирования в Гугл не играют никакой роли.
А Вы что думаете по этому поводу?

П.С. Жду в комментариях специалистов по прогону Хрумером 🙂

Перенаправление со структуры категория/имя поста только имя поста в WordPress

Раньше всегда рекомендовалось использовать название рубрики для структуры постоянных ссылок WordPress (типа ...../wordpress/perenapravlenie-strukturyi-kategoriya/). Считалось что, когда пользователь видит полный адрес страницы, ему проще сориентироваться. Кроме того поисковики подсвечивают ключевые слова в URL ... Но в итоге такой адрес страницы стал создавать проблемы и я решил сменить /%category%/%postname%/  на /%postname%/

Так как до этого использовалась структура /%category%/%postname%/, было иногда трудно перенести пост из одной категории в другую после публикации, так как URL опубликованного поста имел название категории. Кроме того, в случае если пост принадлежал нескольким категориям, то название категории всегда выбиралось в алфавитном порядке в URL, а не из личных предпочтений автора.

Я решил изменить структуру на % postname %  .

настройка структуры постоянных ссылок WordPress

Итак не долго думая изменил настройки постоянных ссылок, но оказалось что сам WordPress не позаботился о редиректах на новые URL. В результате массовые ошибки 404 наших старых URL-адресов. А на сайт стоит множество ссылок!

Вариант 1

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

redirect permanent /blog/general/goodbye-ie6-join-countdown-to-history/ http://site.ru/goodbye-ie6-join-countdown-to-history/

Если постов 100, то и строчек таких должно быть 100!

Вариант 2

Популярные плагины.

Я поставил плагин “Redirection”.

Выберите следующие параметры :
а) " Перенаправление URL " путем сопоставления " только URL "
б) URL Источник: /blog/general/(.* )
с) Целевой URL : / $ 1
d ) Регулярное выражение ( регулярное выражение ) : [ ✔ ] ( Это важная часть в противном случае регулярные выражения работать не будут )

Понятно, что название категорий подставляете свои.

Внимание! Если есть вложенные категории, то для них надо прописывать отдельные правила!

Я сделал только один экземпляр для каждой категории, и все наши старые ссылки были перенаправлены на наши новые ссылки. В общем-то проблема решена.

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

Вариант 3

Всё-таки я решил это сделать через .htaccess , потратил примерно 3 часа, много гуглил, в конечном счете пришёл к удовлетворительному решению .

Достаточно поставить этот код в файле .htaccess:

RewriteRule ^blog/general/(.*) http://domain.com/$1 [R=301,L]

или вот так:

RewriteRule ^blog/general/(.*) index.\php/$1 [R=301,L]

сразу после (важно!):

# BEGIN WordPress

RewriteEngine On
RewriteBase /

Всё отлично сработало!

Решение проблем с плагином Contact Form 7

Настройка и решение проблем с Contact Form 7

Ошибка This email address does not belong to the same domain as the site.

Ошибка This email address does not belong to the same domain as the site.Возникает, если Вы в форме связи в поле From используете какой нибудь ящик yandex.ru, mail.ru и т.д. По новым правилам это должен быть почтовый ящик на вашем сервере, например wordpress@site.ru, admin@site.ru и т.д.(где site.ru - это Ваш домен). Но, к счастью необязательно переходить на новый почтовый ящик с любимого mail.ru 🙂 Достаточно её просто указать в настройках формы Contact Form 7. Вот так:

Решение проблемы Contact Form 7 This email address does notНо это не всё. Даже если Вы не будете пользоваться своим ящиком wordpress@site.ru, он всё равно должен реально существовать. На некоторых нормальных хостингах, такие почтовые ящики сразу создаются службой поддержки. Если Ваша форма не заработала после внесённых изменений, то придётся создавать такой почтовый ящик. Или пишите в техподдержку или создавайте самостоятельно. Вот как это делается на моём хостинге:

 

Ошибка This field can be empty depending on user input.

Ошибка This field can be empty depending on user input.

Возникает в формах связи, которые были созданы до обновления плагина. В новой форме должно быть заполнено поле Additional Headers. Согласно официально справки это Reply-To: [your-email], а в поле Тема обязательно в кавычках "[your-subject]". Вот скриншот правильно заполненных полей:

Решение ошибки

 

 

Изменение стандартной галереи WordPress

На одном туристическом сайте понадобилось массово вставлять галереи в описания баз отдыха. А при такой рутинной работе всегда хочется сэкономить время.

Итак, что мы видим при создании новой галереи в WordPress:

стандартная галлерея ВордпрессВручную надо менять:

  • Ссылка  - На медиафайл (обязательно)
  • Колонки - 3 (по желанию)
  • Размер - Миниатюра (по желанию)

Зачем нам надо ставить ссылку на медиафайл? А для того чтобы работали плагины типа Lightbox и картинка красиво увеличивалась по клику. Но постоянно менять эти параметры муторно. Есть выход!

Вариант 1. Массовое редактирование шорткода [gallery ]

Кто не в курсе - при вставке галереи вставляется шорткод [gallery] с параметрами. Например [gallery columns="5"] - 5 колонок, [gallery link="file" order="DESC" columns="4"] - ссылка на файл, порядок сортировки обратный, 4 колонки.

Чтобы массово отредактировать уже созданные 50-100 галерей устанавливаем плагин Search & Replace и в контенте заменяем [gallery на [gallery link="file" и вуаля! Теперь все галереи будут работать правильно.

Но как настроить, чтобы по-умолчанию создаваемая галерея уже была со свойством "Ссылка на медиафайл"?

Вариант 2. Правим файлы WordPress

Вот тут уже надо быть предельно осторожным и естественно делать бэкап.

Поведение шорткода галереи задаётся в файле wp-includes/media.php. Скачиваем его по FTP и ищем примерно такой фрагмент кода:

$atts = shortcode_atts( array(
		'order'      => 'ASC',
		'orderby'    => 'menu_order ID',
		'id'         => $post ? $post->ID : 0,
		'itemtag'    => $html5 ? 'figure'     : 'dl',
		'icontag'    => $html5 ? 'div'        : 'dt',
		'captiontag' => $html5 ? 'figcaption' : 'dd',
		'columns'    => 3,
		'size'       => 'thumbnail',
		'include'    => '',
		'exclude'    => '',
		'link'       => ''
	), $attr, 'gallery' );

Вот здесь пустой параметр 'link' и задаёт будущее поведение галереи. Смело редактируем 'link'       => 'file' и теперь любая галерея, даже та в которой нет в шорткоде параметра link="file" будет вести себя как надо.

По аналогии можно поиграться с другими свойствами.