SEO, Webperf et choses bizarres…

Outils SEO

Tout le monde a aujourd’hui sa boite Ă  outils, Ă©lĂ©ment sans aucun doute central d’une vieille et ce qu’importe le mĂ©tier. Depuis quelques annĂ©es, je rassemble des scripts, bookmarket, ou outils permettant d’automatiser, amĂ©liorer ou standardiser certains de mes process. Je les rassemble gĂ©nĂ©ralement pour mon propre bĂ©nĂ©fice, mais j’ai toujours pris pour habitude de partager mes travaux et dĂ©couvertes. Vous pouvez donc ajouter cette page Ă  vos favoris et les partager Ă  votre tour avec grand plaisir.

Je vais essayer de tenir cette liste Ă  jour, au fil des Ă©volutions. Une liste plus complĂšte de script est disponible sur mon Gist, n’hĂ©sitez pas Ă  y jeter un oeil.

Suggestion de mots-clés

Un petit outil simple permettant d’effectuer de la recherche de mots-clĂ©s Ă  partir de divers services (Google, Youtube, Amazon, Bing…).

Si vous avez dĂ©jĂ  testĂ© Keyword Tool, le fonctionnement est similaire, en ajoutant plus de personnalisation. Vous pouvez dĂ©finir vous-mĂȘme les prĂ©fixes et suffixes Ă  ajouter Ă  vos mots clĂ©s.

Aucune donnĂ©e n’est rĂ©cupĂ©rĂ©e, pas de crĂ©ation de compte, outil gratuit et anonyme.

http://00.pierrick.dev/

Scripts en Bookmarklet

Pour pouvoir exĂ©cuter ces scripts il vous faut avant tout les ajouter en favoris depuis Chrome (ou n’importe quel autre navigateur).

Allez sur l’URL suivante : chrome://bookmarks/

Click droit dans le vide puis “Ajouter un favoris”

Nommez-le comme vous voulez puis dans le champ URL, ajoutez le script que vous souhaitez tester.

Une fois ajoutĂ© en favoris il suffit de simplement aller sur la page oĂč vous souhaitez exĂ©cuter le script puis de cliquer sur vos favoris prĂ©cĂ©demment crĂ©er.

Analyse des SERP

Extracteur de SERP

Un extracteur de SERP simple, à exécuter depuis une recherche Google, pensez à bien modifier le nombre de résultats Google au maximum.

javascript:(function(){output='<html><head><title>SEO SERP Extraction</title><style type=\'text/css\'>body,table{font-family:Tahoma,Verdana,Segoe,sans-serif;font-size:11px;color:#000}h1,h2,th{color:#3700ff}th{text-align:left}h2{font-size:11px;margin-bottom:3px}</style></head><body>'; output+='<table><tbody><tr><td><a href=\'https://pierrick.dev\'><img src=\'https://pierrick.dev/uploads/0.png\'></a></td><td><h1>SEO SERP Extraction Tool</h1></td></tr></tbody></table>'; pageAnchors=document.getElementsByTagName('a'); divClasses=document.getElementsByTagName('div'); var linkcount=0;var linkLocation=''; var linkAnchorText=''; output+='<table><th>ID</th><th>Link</th><th>Anchor</th>'; for(i=0;i<pageAnchors.length;i++){ if(pageAnchors[i].parentNode.parentNode.getAttribute('class')!='iUh30'){ var anchorText = pageAnchors[i].textContent; var anchorLink = pageAnchors[i].href; var linkAnchor = anchorLink + '\t'+anchorText; var anchorID = pageAnchors[i].id; if(anchorLink!=''){ if(anchorLink.match(/^((?!google\.|cache|blogger.com|\.yahoo\.|youtube\.com\/\?gl=|youtube\.com\/results|javascript:|api\.technorati\.com|botw\.org\/search|del\.icio\.us\/url\/check|digg\.com\/search|search\.twitter\.com\/search|search\.yahoo\.com\/search|siteanalytics\.compete\.com|tools\.seobook\.com\/general\/keyword\/suggestions|web\.archive\.org\/web\/|whois\.domaintools\.com|www\.alexa\.com\/data\/details\/main|www\.bloglines\.com\/search|www\.majesticseo\.com\/search\.php|www\.semrush\.com\/info\/|www\.semrush\.com\/search\.php|www\.stumbleupon\.com\/url|wikipedia.org\/wiki\/Special:Search).)*$/i)){ if(anchorID.match(/^((?!hdtb_more|hdtb_tls|uh_hl).)*$/i)){ linkLocation+=anchorLink+'<br />'; linkAnchorText+=anchorText+'<br />'; linkcount++; if (anchorText === undefined) anchorText = pageAnchors[i].innerText;output+='<tr>'; output+='<td>'+linkcount+'</td>'; output+='<td>'+pageAnchors[i].href+'</a></td>'; output+='<td>'+anchorText+'</td>'; output+='</tr>\n'; } } } } } output+='</table><br/><h2>URL List</h2><div>'; output+=linkLocation;output+='</div><br/><h2>Anchor Text List</h2><div>'; output+=linkAnchorText;output+='<br/>%C2%A0<br/><p align=center><a href=\'https://www.atypicom.fr\'>pierrick.dev</a></p>'; with(window.open()){document.write(output);document.close();}})();

Trouver des URLs à désindexer de Google

Toujours pratique lors de prĂ©-audit, Ă  exĂ©cuter depuis le site en question, le script effectue une recherche de slug d’URL “commune” pouvant ĂȘtre inutile via la commande “inurl:” proposĂ© par Google. N’hĂ©sitez pas Ă  Ă©toffer les requĂȘtes en fonction de vos environnements de travail.

site:www.cybertek.fr inurl:demo OR inurl:/home/ OR inurl:test OR inurl:screenshot OR inurl:sample OR inurl:portfolio OR inurl:landing

Disclaimer : une analyse des rĂ©sultats reste nĂ©cessaire. Une URL qui apparaĂźt signifie pas qu’elle doit forcĂ©ment ĂȘtre dĂ©sindexer !

SEMRush

Affiche les données SEMRush Recherche organique du domaine concerné.

javascript:(function(w){var Y=w.open("https://www.semrush.com/analytics/organic/positions/?db=uk&q="+location.hostname.replace('www.',''));Y.focus()})(window);

Affiche les données SEMRush Analyse du trafic du domaine concerné.

javascript:(function(w){var Y=w.open("https://www.semrush.com/analytics/traffic/overview/"+location.hostname.replace('www.',''));Y.focus()})(window);

Analyse de l’hĂ©bergement

Permets d’identifier l’hĂ©bergeur du site.

javascript:(function(){ window.open('https://hostadvice.com/tools/whois/#'+location.hostname)})();

Identifie si le site utilise un CDN.

javascript:(function(w){var Y=w.open("https://www.cdnplanet.com/tools/cdnfinder/#site:"+document.location.href);Y.focus()})(window);

Exécute un rapport SSLLabs.

javascript:(function(w){var Y=w.open("https://www.ssllabs.com/ssltest/analyze.html?d="+document.location.href);Y.focus()})(window);

Onsite

Exécute le test de données structurées Google.

javascript:void(window.open('https://search.google.com/structured-data/testing-tool/u/0/#url='+location.href));

Exécute le test Mobile Friendly de Google.

javascript:(function(w){var Y=w.open("https://search.google.com/test/mobile-friendly?url="+document.location.href);Y.focus()})(window);

Permets d’extraire le DOM de la page.

javascript:(function(){var script=document.createElement('script');script.src='//mir.aculo.us/dom-monster/dommonster.js?'+Math.floor((+new Date)/(864e5));document.body.appendChild(script);})()

Affiche le balisage sémantique de la page.

javascript:void((function(){var a,b,c,d,e,f;f=new Array('pink','orange','yellow','aquamarine','lightskyblue','plum');for(a=1;a<=6;a++){b=document.getElementsByTagName('h'+a);for(c=0;c<b.length;c++){d=b[c];e=d.style;e.backgroundColor=f[a-1];e.border='solid';e.padding='2px';e.color='black';d.innerHTML='H'+a+' - '+d.innerHTML;}}})())

Scripts divers

Permets d’extraire Googlebot des fichiers de logs. Ultra pratique sur les fichiers de logs de centaines de giga avant de les exporter pour analyse.

#!/usr/bin/perl

use Socket;
sub googlebot($)  {

    # vérifiez si cette adresse IP est vraiment un Googlebot

    my $ip = shift;
    my $bot = 'googlebot\.com';
    my $name = gethostbyaddr(inet_aton($ip), AF_INET) or return 0;
    my @addr = gethostbyname($name);
    if($addr[4]) {
      my $addr = inet_ntoa($addr[4]);      
      return ($name =~ m/$bot/ and $ip eq $addr) ? 1 : 0;
    }
    return 0;
}


if ("$ARGV[0]" =~ /^-h|--help$/) {
  print "Usage: $0 access_log_file > csv_output_file.csv\n";
  print "   Or, $0 < access_log_file > csv_output_file.csv\n";
  print "   Or, $0 < access_log_file > csv_output_file.csv 2> invalid_lines.txt\n";
  exit(0);
}

%MONTHS = ( 'Jan' => '01', 'Feb' => '02', 'Mar' => '03', 'Apr' => '04', 'May' => '05', 'Jun' => '06',
  'Jul' => '07', 'Aug' => '08', 'Sep' => '09', 'Oct' => '10', 'Nov' => '11', 'Dec' => '12' );

print STDOUT "\"Id\",\"Host\",\"Log Name\",\"Date Time\",\"Time Zone\",\"Method\",\"URL\",\"Response Code\",\"Bytes Sent\",\"Referer\",\"User Agent\"\n";
$line_no = 0;

while (<>) {
  ++$line_no;
  if (/^([\w\.:-]+)\s+([\w\.:-]+)\s+([\w\.-]+)\s+\[(\d+)\/(\w+)\/(\d+):(\d+):(\d+):(\d+)\s?([\w:\+-]+)]\s+"(\w+)\s+(\S+)\s+HTTP\/1\.\d"\s+(\d+)\s+([\d-]+)((\s+"([^"]+)"\s+")?([^"]+)")?$/) {
    $host = $1;
    $other = $2;
    $logname = $3;
    $day = $4;
    $month = $MONTHS{$5};
    $year = $6;
    $hour = $7;
    $min = $8;
    $sec = $9;
    $tz = $10;
    $method = $11;
    $url = $12;
    $code = $13;
    if ($14 eq '-') {
      $bytesd = 0;
    } else {
      $bytesd = $14;
    }
    $referer = $17;
    $ua = $18;

    if(googlebot($host)) {
      print STDOUT "\"Crawl $line_no\",\"$host\",\"$logname\",\"$year-$month-$day $hour:$min:$sec\",\"GMT$tz\",\"$method\",\"$url\",$code,$bytesd,\"$referer\"\,\"$ua\"\n";
    } else {
      print STDERR "Adresse IP Google non valide Ă  $line_no: $_";
    }

  } else {
    print STDERR "Ligne invalide Ă  $line_no: $_";
  }
}

D’autres sont Ă  venir….

Pour les plus curieux

Le sous-domaine test.pierrick.dev rassemble aussi un ensemble de test ayant parfois fait l’objet d’un article dans le blog. Il me permet de faire des tests et vĂ©rifier en direct la rĂ©action du moteur.