Générer les keywords à la volée

Discussion dans 'Administration d'un site Web' créé par SnAKes, 5 Août 2005.

  1. SnAKes
    SnAKes Nouveau WRInaute
    Inscrit:
    21 Mai 2004
    Messages:
    44
    J'aime reçus:
    0
    Avec la bufferisation des sorties, PHP permet de faire un prétraitement de la page avant l'envoi au navigateur. On peut par exemple généré à la volée les paramètres alt et title de tous les tags <img> dans la page.

    Ici je vous propose mon script que j'utilise pour générer les mots clefs d'une page.

    Code:
    setlocale(LC_CTYPE, 'fr_FR');
    
    // bufferization des sorties text afin de pouvoir faire un prétraitement
    // avant d'envoyer au navigateur
    ob_start("my_ob_handler");
    
    function unaccent($text) {
    	$trans = get_html_translation_table(HTML_ENTITIES); //Get the entities table into an array
    	foreach ($trans as $literal => $entity) { // Create two arrays, for accented and unaccented forms
    		if (ord($literal) >= 192) { // Don't contemplate other characters such as fractions, quotes etc
    			$replace[] = substr($entity, 1, 1); //Get 'E' from string '&Eaccute' etc.
    			$search[] = $literal;
    		} 
    	} //Get accented form of the letter
    	return str_replace($search, $replace, $text);
    } 
    
    // Extrait du corps de la page HTML générée tous les mots et couple de mots distinct
    // puis trie la list en mettant en haut les mots et couple de mots les plus fréquents
    function getWords($string, $weight=3) {
    	// Petite astuce pour extraire les mots clefs des paramètres alt et title
    	$noTag = preg_replace("/alt=\"(.*?)\"/", "> \\1 <", $string);
    	$noTag = preg_replace("/title=\"(.*?)\"/", "> \\1 <", $noTag);
    
    	// Il faut rajouter un espace avant les < et > afin qu'une fois one élémine les
    	// tag les mots ne soient pas collés les uns aux autres la où il y avait le tag
    	$noTag = preg_replace('/</', ' <', $noTag);
    	$noTag = preg_replace('/>/', '> ', $noTag);
    	
    	// On élimine les tags
    	$noTag = html_entity_decode(strip_tags($noTag));
    	
    	// On vire les retours chariot, retours à la ligne et tabulation
    	$noTag = preg_replace('/[\n\r\t]/', ' ', $noTag);
    	$noTag = preg_replace('/  /', ' ', $noTag); 
    	
    	// On enlève les accents à toutes les lettres
    	$noTag = unaccent($noTag);
    	
    	// On remplace tous les caractères non alphanumériques en espace
    	$noTag = eregi_replace("[^a-z0-9]", " ", $noTag);
    
    	// Minuscules
    	$noTag = strtolower($noTag);
    
    	// Mise en tableau de tous les mots de la page
    	$words = array();
    	$words = explode(" ", $noTag);
    
    	$uniqWords = array();
    
    	// Détection des mots distinct avec leur poids selon la fréquence
    	// d'apparition dans la page
    	foreach($words as $word) {
    		if(!empty($word)) $uniqWords[$word]++;
    	} 
    	reset($words);
    
    	// Détection de couples de mots distincts avec poids		
    	for($i = 0; $i < count($words); $i++) {
    		if(!empty($words[$i]) && !empty($words[$i + 1])) {
    			$coupleOfWords = $words[$i] . " " . $words[$i + 1];
    			$uniqWords[$coupleOfWords]++;
    		} 
    	}
    
    	// Tri selon le poids
    	ksort($uniqWords);
    	
    	// Génération des mots clefs selon leur poids
    	// On ne garde que les mots dont le poids et de minimum $weight
    	while(list($key, $val) = each($uniqWords)) {
    		if(strlen($key) > 2 && $val > $weight) {
    			$keywords .= $key . ", ";
    		}
    	}
    	return $keywords;
    } 
    
    // Fonction callback pour la bufferisation
    function my_ob_handler(&$buffer) {
    	// Génération des mots clefs
    	$keywords = getWords($buffer, 2);
    	
    	// Remplacement de la chaine --KEYWORDS-- présente dans le template par les
    	// mots clefs générés.
    	$buffer = preg_replace("/--KEYWORDS--/", "$keywords", $buffer);
    	
    	// Compression GZip
    	return ob_gzhandler($buffer, 5);
    }
    Dans la page PHP qui génère le HTML, dans l'entete HTML on mettra
    <meta name="keywords" value="--KEYWORDS--">

    --KEYWORDS-- sera remplacé par les mots clefs.

    Cette méthode n'est pas forcément la meilleur mais elle marche pour moi.
     
  2. medium69
    medium69 WRInaute passionné
    Inscrit:
    7 Mai 2005
    Messages:
    1 948
    J'aime reçus:
    3
    Je ne sais pas si c'est bon dans le sens où les moteurs tiennent déjà compte de ces mots-clés dans le corps de la page.

    Si tu met des mots-clés (avec éventuellement des fautes de frappes), dans ta meta, je pense que c'est juste un plus par rapport à ta méthode.

    Je passe beaucoup de temps à générer mes mots-clés et description sur mes page, et je me sers de plusieurs site :
    :arrow: http://inventory.overture.com/d/searchi ... uggestion/
    :arrow: https://account.fr.miva.com/advertiser/ ... Login=true
    :arrow: https://adwords.google.com/select/KeywordSandbox
     
  3. julio38
    julio38 WRInaute discret
    Inscrit:
    19 Avril 2005
    Messages:
    103
    J'aime reçus:
    0
    Rajouter une petite borne de nombre de keyword ne ferais pas de mal.
    Générer 1000 mots clés (si la page à du contenu) ne sera pas forcément très apprécié par les moteurs de recherche ;-)
     
  4. SnAKes
    SnAKes Nouveau WRInaute
    Inscrit:
    21 Mai 2004
    Messages:
    44
    J'aime reçus:
    0
    Code:
    setlocale(LC_CTYPE, 'fr_FR');
    
    // bufferization des sorties text afin de pouvoir faire un prétraitement
    // avant d'envoyer au navigateur
    ob_start("my_ob_handler");
    
    function unaccent($text) {
       $trans = get_html_translation_table(HTML_ENTITIES); //Get the entities table into an array
       foreach ($trans as $literal => $entity) { // Create two arrays, for accented and unaccented forms
          if (ord($literal) >= 192) { // Don't contemplate other characters such as fractions, quotes etc
             $replace[] = substr($entity, 1, 1); //Get 'E' from string '&Eaccute' etc.
             $search[] = $literal;
          }
       } //Get accented form of the letter
       return str_replace($search, $replace, $text);
    }
    
    // Extrait du corps de la page HTML générée tous les mots et couple de mots distinct
    // puis trie la list en mettant en haut les mots et couple de mots les plus fréquents
    function getWords($string, $weight=3,$maxwords=1000) {
       // Petite astuce pour extraire les mots clefs des paramètres alt et title
       $noTag = preg_replace("/alt=\"(.*?)\"/", "> \\1 <", $string);
       $noTag = preg_replace("/title=\"(.*?)\"/", "> \\1 <", $noTag);
    
       // Il faut rajouter un espace avant les < et > afin qu'une fois one élémine les
       // tag les mots ne soient pas collés les uns aux autres la où il y avait le tag
       $noTag = preg_replace('/</', ' <', $noTag);
       $noTag = preg_replace('/>/', '> ', $noTag);
       
       // On élimine les tags
       $noTag = html_entity_decode(strip_tags($noTag));
       
       // On vire les retours chariot, retours à la ligne et tabulation
       $noTag = preg_replace('/[\n\r\t]/', ' ', $noTag);
       $noTag = preg_replace('/  /', ' ', $noTag);
       
       // On enlève les accents à toutes les lettres
       $noTag = unaccent($noTag);
       
       // On remplace tous les caractères non alphanumériques en espace
       $noTag = eregi_replace("[^a-z0-9]", " ", $noTag);
    
       // Minuscules
       $noTag = strtolower($noTag);
    
       // Mise en tableau de tous les mots de la page
       $words = array();
       $words = explode(" ", $noTag);
    
       $uniqWords = array();
    
       // Détection des mots distinct avec leur poids selon la fréquence
       // d'apparition dans la page
       foreach($words as $word) {
          if(!empty($word)) $uniqWords[$word]++;
       }
       reset($words);
    
       // Détection de couples de mots distincts avec poids      
       for($i = 0; $i < count($words); $i++) {
          if(!empty($words[$i]) && !empty($words[$i + 1])) {
             $coupleOfWords = $words[$i] . " " . $words[$i + 1];
             $uniqWords[$coupleOfWords]++;
          }
       }
    
       // Tri selon le poids
       ksort($uniqWords);
       
       // Génération des mots clefs selon leur poids
       // On ne garde que les mots dont le poids et de minimum $weight
       $count = 0;
       while((list($key, $val) = each($uniqWords)) && ($count<$maxwords)) {
          if(strlen($key) > 2 && $val > $weight) {
             $keywords .= $key . ", ";
             $count++;
          }
       }
       return $keywords;
    }
    
    // Fonction callback pour la bufferisation
    function my_ob_handler(&$buffer) {
       // Génération des mots clefs
       $keywords = getWords($buffer, 2);
       
       // Remplacement de la chaine --KEYWORDS-- présente dans le template par les
       // mots clefs générés.
       $buffer = preg_replace("/--KEYWORDS--/", "$keywords", $buffer);
       
       // Compression GZip
       return ob_gzhandler($buffer, 5);
    }
     
  5. Tilt
    Tilt WRInaute impliqué
    Inscrit:
    26 Mars 2005
    Messages:
    761
    J'aime reçus:
    0
Chargement...
Similar Threads - Générer keywords volée Forum Date
Comment générer les meta keywords Débuter en référencement 6 Mars 2009
Méthode pour générer un bon sitemap Crawl et indexation Google, sitemaps 4 Avril 2019
Quels outils pour générer un sitemap xml en ligne ? Référencement Google 20 Septembre 2018
Générer sitemap avec url canonique Crawl et indexation Google, sitemaps 1 Février 2018
Générer du trafic avec les photos : sitemap ou seulement "alt" ? Débuter en référencement 31 Juillet 2017
[Wordpress] Existe-t'il plugin pour générer un nouveau flux RSS ? Développement d'un site Web ou d'une appli mobile 27 Décembre 2016
Générer un .pdf non modifiable Développement d'un site Web ou d'une appli mobile 4 Juillet 2016
En php : Générer un pdf apartir de données d'un formulaire et l'envoyer par mail Développement d'un site Web ou d'une appli mobile 7 Octobre 2015
Crawler de site pour générer les pages en cache Administration d'un site Web 17 Septembre 2015
Comment générer automatiquement la liste des domaines à désavouer ? Débuter en référencement 5 Juillet 2014
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice