Crear Metatags con PHP

Este artículo ya se encuentra obsoleto.
Para una referencia actual leer: Crear metatags con PHP

Los metatags con muy importantes en la optimización para los buscadores, mediante estos metatags podemos indicarle a los buscadores el contenido que tiene nuestra página. Crearemos funciones en PHP para generar dinámicamente los metatags description y keywords.

metatags-generator

Acerca de los Metatags
Los metatags mas importantes son description y keywords que sirven para mostrar el resumen de nuestra página en los buscadores como ya lo explicamos en MetaTags en HTML.

<meta name="description" content="Articulos, tutoriales y noticias acerca de PHP, ActionScript, WordPress. " />
<meta name="keywords" content="wordpress, php, actionscript, google, adsense, flash, thickbox" />

Función para Description
Este consiste en un resumen del contenido de la página y el cual no debe excederse de 250 caracteres, entonces crearemos una función que elimine las etiquetas de HTML y que luego cortamos el texto a 247 caracteres y concatenamos tres puntos al final.

function getMetaDescription($text) {
	$text = strip_tags($text);
	$text = trim($text);
	$text = substr($text, 0, 247);
	return $text."...";
}

Función para Keywords
Para obtener las palabras clave o keywords primero limpiamos el texto, luego extraemos todas las palabras a un array para luego contar uno a uno la cantidad de veces que se repite, omitiendo las palabras de menos de tres caracteres. Luego ordenamos el array por la cantidad de veces que repite la palabra para finalmente mostrar los 10 primeras separadas por comas.

function getMetaKeywords($text) {
	// Limpiamos el texto
	$text = strip_tags($text);
	$text = strtolower($text);
	$text = trim($text);
	$text = preg_replace('/[^a-zA-Z0-9 -]/', ' ', $text);
	// extraemos las palabras
	$match = explode(" ", $text);
	// contamos las palabras 
	$count = array();
	if (is_array($match)) {
		foreach ($match as $key => $val) {
			if (strlen($val) > 3) {
				if (isset($count[$val])) {
					$count[$val]++;
				} else {
					$count[$val] = 1;
				}
			}
		}
	}
	// Ordenamos los totales
	arsort($count);
	$count = array_slice($count, 0, 10);
	return implode(", ", array_keys($count));
}

Luego si tenemos el texto que vamos a mostrar en nuestra página que por ejemplo extraemos de nuestra base de datos generamos los metatags dinámicamente utilizando nuestras funciones recién creadas:



Pueden ver un ejemplo de uso de estas funciones en nuestro Metatags Generator. Obviamente estas funciones se pueden mejorar, por ejemplo agregando un array con palabras comunes que no deseamos que se generen como keywords por ejemplo.

[download id=»19″ autop=»false»]

Comentarios Total 19 comentarios

Matias
Publicado: 28/07/2009 8:26 am

Realmente muy útil el generador de keywords. ¡Muchas gracias!

Kevin Maschke
Publicado: 28/07/2009 11:44 am

Hey!

Genial! Muchas gracias!

Ivanfc0o
Publicado: 29/07/2009 6:50 pm

Muy útil. Definitivamente.
Gracias.

Martin Andrino
Publicado: 30/07/2009 6:05 pm

muy util para posicionarse bien. Muchisimas gracias ;)

Juan
Publicado: 01/08/2009 6:58 pm

He llegado a este artículo buscando una solución para mi problemilla y es que el script que yo había creado corta las palabras clave en los acentos, ñ y demás….lamentablemente la solución propuesta aquí viene con el mismo problema. Por ejemplo, castaña es devuelto como casta…podéis comprobarlo….alguna idea de como solucionar esto???

Gracias!!!

Juan
Publicado: 01/08/2009 7:30 pm

Se me olvidó compartir mi código para las palabras claves:

function keys($text,$listexclude,$listgoldwords,$mindensity,$minlength,$maxwords) {
$text=clean($text);
$text = strtolower($text);
// str_word_count 0 – cuenta la cantidad de palabras de la cadena
$words_count=str_word_count($text);

// str_word_count 1- formar un array con las palabras
$array_words=array($text);

// strlen — Obtiene la longitud de la cadena
$v=strlen($text);

$frequency = array_count_values( str_word_count( $text, 1) );
arsort ($frequency);
$words = array();
$countwords=0;
foreach( $frequency as $F => $value ) {

// Creo que es la formula para la densidad de palabras…¿ :) ?
$density = round( ($value * 100) / ($words_count) );

// trim — Elimina espacios en blanco (u otros caracteres) del principio y final de una cadena
$frequent_word=trim($F);
$excludewords = @explode ( «,»,$listexclude);
if ($frequent_word!=in_array($frequent_word,$excludewords) && !in_array($frequent_word,$words)) {

$includewords = @explode(«,»,$listgoldwords);
// Excluir palabras poco frecuentes, inferiores a un minimo e incluir las que esten en la lista gold
if($value >=$mindensity || in_array($frequent_word,$includewords)){

// Obtener la longitud de la cadena de frecuencia
$long=strlen($F);

// Excluir palabras con longitud de frecuencia inferior al minimo e incluir las que esten en la lista gold
if($long>= $minlength || in_array($frequent_word,$includewords)){
$words[]=$frequent_word;
$countwords++;
if ($countwords>$maxwords)break;
}
}
}
}
$keywordslist = implode(‘,’,$words);
return $keywordslist;
}

function clean($text) {
$text = preg_replace( «‘]*>.*?’si», », $text );
$text = preg_replace( ‘/]*>([^<]+)/is’, ‘\2 (\1)’, $text );
$text = preg_replace( ‘//’, », $text );
$text = preg_replace( ‘/{.+?}/’, », $text );
$text = preg_replace( ‘/ /’, ‘ ‘, $text );
$text = preg_replace( ‘/&/’, ‘ ‘, $text );
$text = preg_replace( ‘/"/’, ‘ ‘, $text );
$text = strip_tags( $text );
$text = htmlspecialchars( $text );
$text = str_replace(array(«\r\n», «\r», «\n», «\t»), » «, $text);
while (strchr($text,» «)) {
$text = str_replace(» «, » «,$text);
}
for ($cnt = 1; $cnt < strlen($text)-1; $cnt++) {
// add a space after any full stops or comma's for readability
// added as strip_tags was often leaving no spaces
if (($text{$cnt} == '.') || ($text{$cnt} == ',')) {
if ($text{$cnt+1} != ' ') {
$text = substr_replace($text, ' ', $cnt + 1, 0);
}
}
}
return $text;
}

Manuel
Publicado: 02/08/2009 1:38 am

No funciona para las palabras clave cuando hay caracteres especiales de por medio (tipo acentos y ñ).

juan
Publicado: 08/10/2009 2:29 pm


$b=array("á","é","í","ó","ú","ä","ë","ï","ö","ü","à","è","ì","ò","ù","ñ","/","-",",",";",":","¡","!","¿","?","'",'"');
$c=array("a","e","i","o","u","a","e","i","o","u","a","e","i","o","u","n","","","","","","","","","","",'');
$text=str_replace($b,$c,$text);

pueden usar eso con los acentos y ñ

TBS
Publicado: 20/03/2010 5:03 am

Yo cree un array con conjunciones (ante, bajo, contra, desde, hasta, segun, sobre, tras….) y otras palabras y las excluyo de match con un array_diff asi tendremos un mejor resultado…
Excelente script, gracias!

Andrés
Publicado: 02/07/2010 3:11 am

Hola, me gustaría tener los meta automáticos, pero no se muy bien dónde poner los códigos.

Entiendo que estos van en los php, al inicio del documento…

<meta name="description" content="" />
<meta name="keywords" content="" />

Pero:

function getMetaDescription($text) {
$text = strip_tags($text);
$text = trim($text);
$text = substr($text, 0, 247);
return $text."...";
}

éste dónde va? en qué lugar lo pego (si he de pegarlo, claro…)?

larguipino
Publicado: 26/09/2010 12:23 am

Cuando intento aceder a la pagina de Metatags Generator no me carga un saludo y gracias

Omar
Publicado: 11/12/2010 3:49 pm

Quiero saber en que lugar en especifico tengo que poner cada codigo

Omar
Publicado: 11/12/2010 3:53 pm

Por que hasta el momento tengo un index.html en este es que debo de pegar

Daniel
Publicado: 21/02/2011 5:40 pm

muy bueno el codigo yo lo utilizo con lo malo de que corta las palabras con caracteres especiales

a mejroarlo y lo subo aki mismo

Daniel
Publicado: 21/02/2011 6:16 pm

Listo lo prometido es deuda :D aki esta la carreccion al codigo para que no te corte las palabras y te respete los caracteres especiales

hay que remplazar esta parte del codigo

$text = preg_replace('/[^a-zA-Z0-9 -]/', ' ', $text);

por esta otra parte nueva

$text = preg_replace('/&([a-zA-Z])(.*?);/', ' ', $text);

y listo espero les sirva a todos :D

Arturo
Publicado: 12/03/2011 4:18 pm

Gracias muy bueno! me ha servido de mucho!

Garcia
Publicado: 13/05/2011 5:29 pm

funciona, pero no elimina los saltos de linea de la cadena.

por ejemplo:

$str= ‘aca
una
dos
tres’;

no los elimina.

tambien, corta las urls de la cadena

alguna solución?

Gracias de antemano

Hugo
Publicado: 25/05/2012 8:57 pm

y yo pues comparto eso no le pongo código si el administrador después lo determina que lo pase a código (no es backlinks sin código), herramienta gratuita para seo, http://www.hgdhosting.com/PS ahí tienen las herramientas SEO Panel para usar
Gracias por la información, me aclaro una duda.

Manuel
Publicado: 26/08/2013 12:53 am

Estaba buscando algo como esta posibilidad, pero cuando lo implemento no me funciona me da error; Notice: Undefined variable: text in.

Que podrá se o ya no funciona! He creado un archivo PHP llamada metatags.php en el estan las funciones; luego en el archivo header.php en donde van los metatags simplemente incluyo el metatags.php y pongo el llamado a los resultados de las funciones tal cual como lo indica el post.

Pero no me funciona.

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)