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:
    759
    J'aime reçus:
    0
Chargement...
Similar Threads - Générer keywords volée Forum Date
Quels Outils Javascript pour générer des documents Demandes d'avis et de conseils sur vos sites 21 Juillet 2020
Comment générer un impact positif sur votre SEO avec les Web Push Notifications ? Référencement Google 18 Février 2020
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