Простой SEO-скрипт: альтернатива массивным SEO-плагинам в WordPress

Большая часть SEO-плагинов имеет слишком много лишнего функционала для моих простых нужд, потому я решил написать небольшой фрагмент кода, который будет являться удобной заменой мощных SEO-плагинов для WordPress. Если вам требуется много разных настроек и возможностей, вы можете воспользоваться плагином от Yoast или All in One SEO; в противном случае, если вам требуется что-то простое, что действительно работает, то в таком случае воспользуйтесь Basic WP SEO – для этого вам нужно всего лишь добавить код, представленный ниже, в файл functions.php.

Что делает этот код?

Все просто. Он оптимизирует ваши страницы WordPress для поисковых систем, добавляя следующие метаданные в раздел head:

Meta description – использует произвольные метаданные, если они существуют; в противном случае берет первые 155 слов контента.

Meta keywords – использует произвольные метаданные, если они существуют; в противном случае генерирует ключевые слова из меток и рубрик.

Meta Robots – подключает атрибуты index/follow или noindex/follow в зависимости от страницы

SEO title – использует произвольные метаданные, если они существуют; в противном случае генерирует оптимизированный уникальный заголовок.

Все это полезные, выгодные компоненты, которые обязательно необходимо использовать на своих веб-страницах, что и делает SEO-плагины такими популярными. Проблема заключается в том, что многие плагины SEO слишком перегружены и масштабны, что особенно остро стоит для тех людей, который предпочитают работать с .htaccess, robots.txt, картами сайта и Google Analytics посредством своих собственных методов оптимизации. Попытка вместить все это в отдельный плагин лично для меня не сработала – мне требовалось что-то целостное и надежное для оптимизации моих сайтов, потому я решил воспользоваться фрагментом кода Basic WP SEO, который впоследствии я преобразовал в свой собственный плагин:

/* Basic WP SEO
	Использование: 
		1. Добавьте этот код в functions.php
		2. Замените $default_keywords своими собственными кейвордами
		3. Добавьте <?php echo basic_wp_seo(); ?> в header.php
		4. Протестируйте результат.

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

		mm_seo_desc
		mm_seo_keywords
		mm_seo_title

*/
function basic_wp_seo() {
	global $page, $paged, $post;
	$default_keywords = 'wordpress, plugins, themes, design, dev, development, security, htaccess, apache, php, sql, html, css, jquery, javascript, tutorials'; // customize
	$output = '';

	// description
	$seo_desc = get_post_meta($post->ID, 'mm_seo_desc', true);
	$description = get_bloginfo('description', 'display');
	$pagedata = get_page($post->ID);
	if (is_singular()) {
		if (!empty($seo_desc)) {
			$content = $seo_desc;
		} else if (!empty($pagedata)) {
			$content = apply_filters('the_excerpt_rss', $pagedata->post_content);
			$content = substr(trim(strip_tags($content)), 0, 155);
			$content = preg_replace('#\n#', ' ', $content);
			$content = preg_replace('#\s{2,}#', ' ', $content);
			$content = trim($content);
		} 
	} else {
		$content = $description;	
	}
	$output .= '<meta name="description" content="' . esc_attr($content) . '">' . "\n";

	// keywords
	$keys = get_post_meta($post->ID, 'mm_seo_keywords', true);
	$cats = get_the_category();
	$tags = get_the_tags();
	if (empty($keys)) {
		if (!empty($cats)) foreach($cats as $cat) $keys .= $cat->name . ', ';
		if (!empty($tags)) foreach($tags as $tag) $keys .= $tag->name . ', ';
		$keys .= $default_keywords;
	}
	$output .= "\t\t" . '<meta name="keywords" content="' . esc_attr($keys) . '">' . "\n";

	// robots
	if (is_category() || is_tag()) {
		$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
		if ($paged > 1) {
			$output .=  "\t\t" . '<meta name="robots" content="noindex,follow">' . "\n";
		} else {
			$output .=  "\t\t" . '<meta name="robots" content="index,follow">' . "\n";
		}
	} else if (is_home() || is_singular()) {
		$output .=  "\t\t" . '<meta name="robots" content="index,follow">' . "\n";
	} else {
		$output .= "\t\t" . '<meta name="robots" content="noindex,follow">' . "\n";
	}

	// title
	$title_custom = get_post_meta($post->ID, 'mm_seo_title', true);
	$url = ltrim(esc_url($_SERVER['REQUEST_URI']), '/');
	$name = get_bloginfo('name', 'display');
	$title = trim(wp_title('', false));
	$cat = single_cat_title('', false);
	$tag = single_tag_title('', false);
	$search = get_search_query();

	if (!empty($title_custom)) $title = $title_custom;
	if ($paged >= 2 || $page >= 2) $page_number = ' | ' . sprintf('Page %s', max($paged, $page));
	else $page_number = '';

	if (is_home() || is_front_page()) $seo_title = $name . ' | ' . $description;
	elseif (is_singular())            $seo_title = $title . ' | ' . $name;
	elseif (is_tag())                 $seo_title = 'Tag Archive: ' . $tag . ' | ' . $name;
	elseif (is_category())            $seo_title = 'Category Archive: ' . $cat . ' | ' . $name;
	elseif (is_archive())             $seo_title = 'Archive: ' . $title . ' | ' . $name;
	elseif (is_search())              $seo_title = 'Search: ' . $search . ' | ' . $name;
	elseif (is_404())                 $seo_title = '404 - Not Found: ' . $url . ' | ' . $name;
	else                              $seo_title = $name . ' | ' . $description;

	$output .= "\t\t" . '<title>' . esc_attr($seo_title . $page_number) . '</title>' . "\n";

	return $output;
}

Просто введите свои стандартные кейворды и вызовите функцию, добавив следующий тег в раздел head ваших страниц (к примеру, в файл header.php):

<?php echo basic_wp_seo(); ?>

Обратите внимание, что этот код является заменой/альтернативой для существующих методов, т.е. он ничего не перезаписывает и ни с чем не сцепляется – вызовите его там, где вам требуется, и измените в соответствии со своими нуждами. Это означает, что вам понадобится удалить любые существующие title или meta теги, которые могут уже присутствовать в файле header.php.

Как только скрипт Basic WP SEO и тег в хэдере будут загружены на сервер, посетите все страницы (отдельную страницу, главную страницу, архивы, 404 и т.д.), откройте исходный код и убедитесь в том, что вся необходимая функциональность была добавлена. Я протестировал этот скрипт на своих сайтах, и у меня все работало прекрасно, однако вам, возможно, понадобится несколько изменить код для правильного отображения.

Возможности

Простой скрипт, конечно, обладает не такими богатыми возможностями, но их легко можно расширить. Вот лишь некоторое особенности Basic WP SEO:

  • Один plug-n-play скрипт, обладающий минимальной конфигурацией
  • Оптимизированные теги заголовков, основанные на Perfect WordPress Title Tags
  • Простая миграция с большинства SEO-плагинов, использование их данных
  • Генерация SEO-оптимизированных meta robots тегов для всех страниц
  • Вывод чистой разметки, и т.д.

Опять же, основная цель этого скрипта состоит в том, чтобы обеспечить простую альтернативу «многофункциональным» WP SEO-плагинам, существующим на данный момент. В плагинах Yoast и All in One функциональность выходит далеко за пределы оптимизации meta/robots и title; вы также получаете карты сайта, навигацию, Google Analytics и многое другое. Таким образом, основная задача скрипта Basic WP SEO состоит не в том, чтобы дать все это, а в том, чтобы сосредоточиться на основах, и с них уже идти дальше.

Миграция с AiOSEO, Yoast SEO и похожих плагинов

Поддержка существующих/произвольных метаданных никуда не пропадет, поэтому вы можете продолжать добавлять произвольные ключевые слова, заголовки и описания для отдельных записей и страниц через произвольные поля. Чтобы использовать любые существующие данные, полученные от других SEO-плагинов, вы можете поступить двумя способами: либо изменить скрипт, либо переименовать мета поля в базе данных. Скажем, до перехода к WP SEO я сначала использовал AiOSEO, потом пробовал ставить Yoast SEO; в итоге моя база данных WP содержала много странных произвольных мета полей:

_yoast_wpseo_metakeywords
_yoast_wpseo_title
_yoast_wpseo_metadesc

Очевидно, что плагин Yoast SEO после активации приписывает свой префикс ко всем существующим SEO-полям. Как это будет выглядеть в вашей базе данных – неизвестно. Можно лишь сказать, что они будут похожи на поля в примере. Как только у вас будут на руках названия мета полей, вы можете мигрировать от SEO-плагина к Basic WP SEO скрипту, причем сделать это вы можете двумя способами:

  • Отредактируйте значения mm_seo_desc, mm_seo_keywords, mm_seo_title в скрипте Basic WP SEO, чтобы они соответствовали значениям существующих полей.
  • Либо, если вы точно решили больше не возвращаться к SEO-плагинам – переименуйте мета поля в базе данных.

Я решил просто переименовать поля базы данных, используя следующие SQL-команды:

UPDATE `wp_postmeta` SET `meta_key` = 'mm_seo_keywords' WHERE `meta_key` = '_yoast_wpseo_metakeywords'
UPDATE `wp_postmeta` SET `meta_key` = 'mm_seo_title' WHERE `meta_key` = '_yoast_wpseo_title'
UPDATE `wp_postmeta` SET `meta_key` = 'mm_seo_desc' WHERE `meta_key` = '_yoast_wpseo_metadesc'

Некоторые примечания по поводу запросов:

Создайте бэкап базы данных перед внесением в нее изменений

Подчеркивание означает, что произвольное поле скрыто; исключение его означает, что произвольное поле будет доступно для использования и изменения в редакторе записей/страниц;

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

wp_postmeta – стандартное название таблицы. Если вы используете произвольный префикс базы данных, вам нужно будет его добавить (к примеру, если префикс базы данных whatever_, то вам надо будет изменить wp_postmeta на whatever_wp_postmeta).

Как только мета поля будут переименованы, они будут использоваться скриптом Basic WP SEO в случае их доступности; в противном случае вы можете либо добавить их вручную (через произвольные поля), либо скрипт сам автоматически сгенерирует уникальные описания, кейворды, заголовки и теги robots для записей и страниц.

Заключение

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

Источник: digwp.com

Блог про WordPress
Комментарии: 4
  1. vovasik

    во хорошая тема, жал не увидел раньше уже собрал себе похожую функцию, только побольше

  2. Nurlan

    Здравствуйте. Скажите пожалуйста, а почему Вы, однако, все равно используете плагин All in One SEO Pack?

    1. Дмитрий (автор)

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

  3. Виктор

    Еще в институте написал свой движок для сайта — все просто и стабильно работет и по сей день, движок весит около двух мегабайт. Функционал обеспечивает все необходимые нужды и СЕО в том числе.
    И честно сказать, не понимаю зачем нужно городить плагины, в которых пользователю нужно всего две -три функции. Поэтому автор большой молодец, и его минимализм я полностью поддерживаю!

Добавить комментарий

Получать новые комментарии по электронной почте.