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.
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
Publicado: 28/07/2009 8:26 am
Realmente muy útil el generador de keywords. ¡Muchas gracias!
Publicado: 28/07/2009 11:44 am
Hey!
Genial! Muchas gracias!
Publicado: 29/07/2009 6:50 pm
Muy útil. Definitivamente.
Gracias.
Publicado: 30/07/2009 6:05 pm
muy util para posicionarse bien. Muchisimas gracias ;)
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!!!
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;
}
Publicado: 02/08/2009 1:38 am
No funciona para las palabras clave cuando hay caracteres especiales de por medio (tipo acentos y ñ).
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 ñ
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!
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…)?
Publicado: 26/09/2010 12:23 am
Cuando intento aceder a la pagina de Metatags Generator no me carga un saludo y gracias
Publicado: 11/12/2010 3:49 pm
Quiero saber en que lugar en especifico tengo que poner cada codigo
Publicado: 11/12/2010 3:53 pm
Por que hasta el momento tengo un index.html en este es que debo de pegar
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
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
Publicado: 12/03/2011 4:18 pm
Gracias muy bueno! me ha servido de mucho!
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
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.
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.