SummArg | Cursos y recursos para webmasters

13/09/2013

SEO básico y eficiente para WordPress sin plugins

Uno de los pilares de cualquier buen sitio web radica en poseer determinadas características que lo hagan amigable a los buscadores. De ese modo nos garantizamos una mayor posibilidad de ser indexados en buenas posiciones cuando los usuarios realicen determinadas búsquedas. Y decimos sólo una mayor posibilidad porque el SEO es mucho mas complicado que colocar un par de etiquetas correctamente, pero nosotros queremos brindar una base para un buen arranque, luego el resto de la campaña depende de otras cuestiones.

Este método prescinde de la instalación de plugins, evitando la llamada a mas archivos, contenidos innecesarios, y la necesidad de actualizaciones constantes. Es un buen método para economizar recursos del servidor.

En WPRecipes comparten una función para SEO que se coloca en el functions.php del theme y cubre las cuestiones básicas.
La primera parte consiste en declarar las keywords (palabras clave) que verán los navegadores. Recuerden no excederse y colocar una cantidad que no exceda los 12 términos (de hecho, se dice que el ideal son 8). Estos se verán sólo en el home.

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 = '';

Ahora definimos el meta description de forma dinámica. Si se trata de indexar el home, pasaremos el valor de la descripción que llenamos desde la pestaña Ajustes, pero si se trata de una página interna podemos pasar el valor desde un custom field “mm_seo_desc”.

	// description
	$seo_desc = get_post_meta($post->ID, 'mm_seo_desc', true);
	$description = get_bloginfo('description', 'display');
	$pagedata = get_post($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";

Imprimimos las keywords descriptas al inicio, pero si estamos en una sección interna podemos definirlas desde un custom field “mm_seo_keywords”.

	// 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";

Pasamos el meta robots para cuando una sección de archivo o categoría está paginada, es home o es entrada individual.

	// 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";
	}

El título de la página debe definirse mediante el tag <title> esto podemos hacerlo tranquilamente de modo dinámico. Para el caso de las entradas, podemos definirla vía custom field “mm_seo_title”. Para el resto de los casos lo tomaremos del nombre de la categoría, del tag, el término de búsqueda, el nombre del blog, etc.

	// 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;
}

Luego pegamos el siguiente código en nuestro header.php para llamar a la función y listo.

<!--?php echo basic_wp_seo(); ?-->

Dejar un comentario

  1. Hola amigo, este código aún funciona con WP 3.8?

Dejar un comentario