Voici une démonstration “powerpoint” pour vous donner quelques conseils d’optimisation de votre blog wordpress :
L’outils Wordpress est formidable, notamment cette version 2.7 qui véritablement changé l’administration.
Cette version 2.7 possède aussi quelques petits bugs de contenu dupliqué.
Eviter le Duplicate Content avec les Pages de commentaires
Wordpress 2.7 propose de séparer les commentaires sur plusieurs pages, agréable pour la lecture d’une page avec la création d’une page :
http://www.alexandreval.info/cv/blablablabla/comment-page-X
Cette page faisant référence à
http://www.alexandreval.info/cv/blablablabla/
Il se produit alors un duplicate content sur les pages de commentaires. C’est pas très bon pour le référencement, Google n’aime pas cela, alors mieux vaut être gentil avec GG et lui fournir une page “propre”. Pour éviter ce contenu dupliqué, il suffit de rajouter cette petite fonction dans votre page function.php (située dans votre dossier wp-content/theme/NOM_DU_THEME/ :
function noindexoncommentinwp(){
global $wp_query;
if (version_compare( (float) get_bloginfo(’version’), 2.7, ‘>=’) ){
if ($wp_query->is_singular && get_option(’page_comments’)){
if (isset($wp_query->query['cpage'])
&& absint($wp_query->query['cpage']) >= 1 ){echo ‘<meta name=”robots” content=”noindex” />’.PHP_EOL;
}
}
}
}add_action(’wp_head’,'noindexoncommentinwp’);
Cette fonction rajoutera une balise meta no follow pour indiquer aux moteurs de ne pas indexer cette page
Eviter le Duplicate Content avec les Multi Page
Comme pour les commentaires, les pages multiples pour un article créent du contenu dupliqué, on peut alors créer une fonction qui va ajouter la même balise que dans la fonction au dessus.
function noindexinwp(){
global $wp_query;
if(is_single && $wp_query->query[page]) echo “\t”.’<meta name=”robots” content=”noindex,follow” />’.”\n”;
}
add_action(’wp_head’, ‘noindexinwp’, 1);
Avec cela, vous êtes parés pour recevoir les félicitations de notre ami Google
Article rédigé d’après la trouvaille de NWE, et de l’astuce découverte par Julien.
Safari est le navigateur le plus rapide dans l‘interprétation de javascript. Vincent Hermann de PCINpact s’est amusé à passer tous les navigateurs sous SunSpider, qui permet de tester la vitesse d’interprétation du Javascript. Résultats cinglants pour IE…
- Firefox 3.1 avec TraceMonkey : 2144 ms
- Firefox 3.1 sans TraceMonkey : 3470 ms
- Opera 9.60 : 5876 ms
- Internet Explorer 8 : 9013 ms
- Chrome : 2117 ms
- Safari avec Webkit r36712 : 1817 ms
A noter que le nouveau navigateur de Google, Chrome, monté sur Webkit s’en tire plutôt pas mal !
Comment ne plus recevoir de spam sur son site/blog ? C’est la question que tout le mon s’est posé une fois.
Je ne vais pas vous parler de scripts à mettre en place, de Captcha ou d’inscriptions avant de commenter un message.
Ma technique est la suivante, et elle fonctionne à 99% des robots spammers.
Il suffit de mettre en place un champs texte placé dans le formulaire qui sera caché par un style css :
-
<input type="text" name="pseudo" value="" style="visibility:hidden" />
Il faudra vérifier à l’envoi du formulaire si ce champs a été renseigné. Si c’est le cas, alors c’est un robot qui l’a rempli. Un robot de spam remplit automatiquement tout les champs du formulaire qu’il trouve dans le code source de la page. Il pourra donc voir ce champs caché et tomber dans le piège.
Il faut donc vérifier que le champs a été renseigné :
-
}
Je l’ai testé sur Tuxboard.com, je recevais pas moins de 500/600 spams par jours, et maintenant, j’en reçois 1 voire 2 maximum par jour !
Vous obtiendrez en plus de cette suppressions nauséabondes de spams, un gain de performance car il n’est pas s’en rappelez que vous ne subirez pas les utilisations de requêtages des robots et tout cela sans ajout de scripts et autres captcha, souvent illisibles.
Évidemment, cette technique n’a aucun moyen de lutter contre les utilisateurs/spammeurs qui polluent les blogs.
Le site propose QuarkBase propose plusieurs informations utiles pour un site internet :
- Description du site avec les balises meta, les sites qui sont similaires au vôtre.
- Popularité dans les sites communautaires (Digg, Twitter, Technorati…), et les backlinks.
- Traffic de votre site grâce aux stats de Alexa.com.
- Et les informations concernant le propriétaire et son hébergement (IP, hébergeur…)
Il y a aussi d’autres sites similaires à quarkbase :
- urlmetrix
- aboutus
- alexa
Je viens de terminer un site sur les acteurs des jeux vidéo : Game Credits, réalisé pour la société Connection Events, qui organise la Game Connection dans le monde entier ainsi que la Paris GDC, conférence sur les jeux vidéo entre professionnel.
Game Credits est donc pour les PRO du jeux vidéo, une sorte de IMDB des jeux avec les personnes ayant travaillé sur les jeux vidéos, les sociétés éditrices, productrices ou développeurs.
Le site a été développé en PHP/MySQL avec le CMS Smarty. Pourquoi ? Tout simplement parce qu’un développeur de Connection Events avait déjà réalisé la structure du site avec. J’ai repris l’existant en adaptant la structure pour respecter le cahier des charges.
Game Credits propose les crédits d’un jeu :
Les informations d’une société
Les informations limitées d’un utilisateur (employé) :
Qu’est-ce que le hotlinking d’image ?
C’est l’utilisation de ressources (images) provenant d’un site (A), que l’on utilise sur un autre (B) en gardant le lien d’origine (Lien ressource A).
Cela pose problème puisque notre webmaster (A) doit supporter les accès au fichier du site (B).
Pour interdire le Hotlinking (d’image), voici une petite astuce. On utilisera le .htaccess qui sera interprété par Apache.
Je reprendrai l’exemple de mon blog (Tuxboard.com) souvent visité et fréquemment “pompé”.
Il faudra au préalable activer le module de rewrite d’apache.
Dans le fichier .htaccess :
-
RewriteEngine On
-
On autorise les sites qui peuvent utiliser la ressource :
-
RewriteCond %{HTTP_REFERER} !^http://(www\.)?tuxboard.com(/)?.*$ [NC]
-
RewriteCond %{HTTP_REFERER} !^http://(www\.)?google.com/reader(/)?.*$ [NC]
-
Et aussi les moteurs pour le référencement :
-
RewriteCond %{HTTP_USER_AGENT} !^Googlebot [NC]
-
RewriteCond %{HTTP_USER_AGENT} !^Googlebot-Image [NC]
-
RewriteCond %{HTTP_USER_AGENT} !^Googlebot-Mobile [NC]
-
RewriteCond %{HTTP_USER_AGENT} !^Msnbot [NC]
-
RewriteCond %{HTTP_USER_AGENT} !^Slurp [NC]
-
RewriteCond %{HTTP_USER_AGENT} !^Mediapartners-Google [NC]
-
#Lien pour autoriser Google image d’indexer et d’utiliser l’image
-
RewriteCond %{HTTP_REFERER} !^http://.*google\.(com¦(co\.)?[a-z]{2})/
Ensuite il existe plusieurs façon de montrer à l’utilisateur du site (B) que l’image provient du site (A) :
On affiche une erreur :
-
RewriteRule \.(gif|jpe?g|png|bmp)$ - [F]
On affiche une image, précisant les types d’images que l’on souhaite protéger.
-
RewriteRule \.(gif|jpe?g|png|bmp)$ /images/no-hotlink.jpg [L,NC]
Ce qui affichera par exemple pour cette image du site Tuxboard :
http://images.tuxboard.com/d/8257-1/iphone+3G+photos.jpg

Pour tester que votre code fonctionne, rendez vous sur ce site pour coller l’URL de votre image.
Pour les blogs avec les RSS, vous pouvez autoriser les RSS readers que vous pensez être utile (vu chez Korben) :
-
RewriteCond %{HTTP_REFERER} !^http://(www\.)?netvibes.com(/)?.*$ [NC]
-
RewriteCond %{HTTP_REFERER} !^http://(www\.)?bloglines.com(/)?.*$ [NC]
-
Suite à un billet d’un collègue développeur (Jarodxxx), et d’un commentaire souhaitant obtenir un return, je vous propose quelques fonctions très utiles que j’utilise.
1 - Fonction qui retourne une liste déroulante (SELECT, ComboBox) :
-
/*fonction qui fabrique une combobox
-
parametres :
-
$tabs => $tableau qui contient les données a mettre dans la combo
-
$value => champ utiliser comme value
-
$text => champ a utiliser comme text
-
$comboname => nom a donner a la combo
-
$inserblank => boolean qui dit si on doit inserer une ligne blanche au debut de la combo
-
$selectedValue => valeur a selectionner dans la combo
-
$onChangeEvent => fonction javascript a appeler sur l’event ‘onChange’
-
$disabled => desactiver ou non la liste*/
-
-
function makeComboBox($tabs, $value, $text, $comboname, $insertblank=false, $selectedValue=false, $onChangeEvent=”, $disabled=false)
-
{
-
/*par defaut, combo "vide" */
-
$return = ‘<select name="’.$comboname.‘" id="’.$comboname.‘" disabled="disabled"><option value="">Empty list</option></select>’;
-
{
-
$return = ‘<select name="’.$comboname.‘" id="’.$comboname.‘"’;
-
if ($onChangeEvent != ”)
-
$return .= ‘ onChange="’.$onChangeEvent.‘"’;
-
if ($disabled)
-
$return .= ‘ disabled="disabled"’;
-
$return .= ‘>’;
-
-
if ($insertblank)
-
$return .= ‘<option value=""></option>’;
-
-
foreach($tabs as $tab){
-
//for ($i=0; $i<count($tab); $i++){
-
-
$return .= ‘<option value="’.$tab[$value].‘"’;
-
if ($selectedValue!=false)
-
if ($tab[$value] == $selectedValue)
-
$return .= ‘ selected="selected"’;
-
$return .= ‘>’.$tab[$text].‘</option>’."\n";
-
}
-
$return .= ‘</select>’;
-
}
-
return $return;
-
}
-
2 - Fonction qui retourne un Multi Select : Liste déroulante avec plusieurs choix possibles:
-
/*Gestion des combos a selection multiples
-
parametres :
-
$tab => $tableau qui contient les données a mettre dans la combo
-
$value => champ utiliser comme value
-
$text => champ a utiliser comme text
-
$comboname => nom a donner a la combo
-
$inserblank => boolean qui dit si on doit inserer une ligne blanche au debut de la combo
-
$selectedValue => valeur a selectionner dans la combo
-
$onChangeEvent => fonction javascript a appeler sur l’event ‘onChange’
-
$disabled => desactiver ou non la liste
-
$size => Nombre d’élément de la liste que l’on affiche
-
*/
-
function makeMultipleComboBox($tab, $value, $text, $comboname, $insertblank=false, $selectedValue, $onChangeEvent=”, $disabled=false, $size=5)
-
{
-
/*on recupere une combo normale, sans rien selectionner*/
-
$return = $this->makeComboBox($tab, $value, $text, $comboname, $insertblank, -1, $onChangeEvent, $disabled);
-
/*On change le type de combo*/
-
/*on parse le code html pour rajouter les selections la ou il faut*/
-
{
-
//print_r($selectedValue);exit;
-
//$tSelectedValue = split(’,', $selectedValue);
-
foreach ($selectedValue as $cur)
-
{
-
$return = str_replace(‘<option value="’.$cur.‘">’, ‘<option value="’.$cur.‘" selected="selected">’, $return);
-
}
-
}
-
return $return;
-
}
-
2 fonctions très utiles donc qui génèrent le code HTML.
Voici un code pour alterner le contenu de 2 DIV et avec un seul lien.
On va créer tout d’abord 2 div contenant 2 textes à alterner avec un CSS element.style.display différent.
<div id=”mod_1″ style=”display: block;”> BONJOUR </div>
<div id=”mod_2″ style=”display: none;”> AU REVOIR </div>
Explication : element.style.display ne retourne une valeur que si l’élément a un attribut HTML style avec propriété CSS display renseignée, donc dans notre cas, la DIV avec l’id mod_1 sera affichée au chargement de la page tandis que mod_2 sera cachée.
Il nous faut un lien pour pouvoir alterner entre les 2 div.
<a onclick=”alterner(’mod_1′,’mod_2′);” title=”Alterner les 2 div”>Alterner</a>
Il nous manque plus que le Javascript :
<script type=”text/javascript”>
function alterner(obj1, obj2){
var obj1 = document.getElementById(obj1);
var obj2 = document.getElementById(obj2);
obj1.style.display = (obj1.style.display == “block”) ? “none” : “block”;
obj2.style.display = (obj2.style.display == “block”) ? “none” : “block”;
}
</script>
Que va faire le script ? Si la DIV mod_1 (obj1 la fonction javascript) est à display:block (affichée) alors on définit la DIV mod_2 à display:none (cachée) et inversement.
Voici un exemple en cliquant sur le lien “Alterner les DIV” :
Alterner les DIV
BONJOUR
Je commence à vous montrer quelques scripts et astuces pour améliorer vos codes (PHP).
Une petite astuce toute simple pour mettre des majuscules à tous vos mots d’une chaîne de caractères. La fonction ucwords(); de php le permet , exemple :
$chaine = ‘alexandre val developpeur web’;
echo ucwords($chaine);
Ce qui affichera :
Alexandre Val Developpeur Web
Attention : la fonction ne comprend pas les ‘-’, ‘_’ ‘(’ devant les lettres. ce qui fait qu’une phrase comme celle-ci :
echo ucwords(’alexandre val (developpeur web)’);
affichera :
Alexandre Val (developpeur Web)
N’oubliez pas les fonction pour tout réduire en minuscule : strtolower(); et en majuscule : strtoupper();
strtolower(), que l’on peut combiner avec ucwords() pour formatter le texte, exemple :
$chaine = ALEXANDRE VAL DEVELOPPEUR WEB’;
echo ucwords(strtolower($chaine));
Affichera :
Alexandre Val Developpeur Web
- Réalisation d’un site sur les acteurs des jeux vidéos façon IMDB. : Games Credits
- Refonte graphique de mon site CV Freelance. Voir la précédente version.
- Développement d’une page de démarrage personnalisable. Cliquez pour voir l’explication
- Administrateur du Site/Blog Tuxboard.com.
Plus de 30.000 visiteurs quotidien. Consultez les statistiques en détails de mon blog.
Design CSS, développement PHP/MySQL, retouche Photoshop et administration Linux (Debian).
Disponible à cette adresse.
- Développement du site Wanimo.com.
Design CSS, développement PHP(Objet)/MySQL, retouche Photoshop.
Disponible à cette adresse.
- Création du site Cronos
Découpe Photoshop, intégration graphique, design CSS, développement PHP.
- Développement de modules pour un forum de poker : Lyonholdem.com
Création de module greffés au forum de discussion et au backoffice.
Disponible à cette adresse.
- Développement d’une boutique en ligne simplifiée (Paiement par Paypal/CB).
Possibilité d’upgrader en boutique en ligne avec paiement en ligne CB.
Disponible à cette adresse.
![]() Cliquez pour agrandir |
Tuxboard.com |
|
| Blog Blog créé début 2007, consacré aux Clips vidéo musicaux, images insolites, Photos, Publicité, playlists musicales. Tuxboard.com compte à ce jour (16 octobre 2007) plus de 25.000 visites quotidiennes. Consultez les statistiques du blog Tuxboard.com Développement d’outils pour le site, de plugins pour Dotclear. |
![]() |
Wanimo.com |
|
| Site grand public.Développement d’un site marchand (ventes de nourriture, accessoires animaux). Mise à jour de la base de données du site : Lotus en MySQL/PHP. Développement outils mon compte, modules de backoffice. Design CSS, Retouche Photoshop. Langage utilisé : PHP/MySQL, HTML/CSS (W3C) |
||
Création d’un système de cache en PHP orienté objet pour sites pour téléphone mobile.
![]() |
TetraPak.fr |
|
| Site grand public. Reprise de l’existant : créations / modifications des pages et ajout de communiqués de Presse. Retouche d’images. Langage utilisé : PHP/MySQL, HTML/CSS (W3C) Lancements d’emailings mensuels. |
||
|
|
||
![]() |
Orange Alchemy |
|
| Développement du site Orange Alchemy en ASP / SQL Server. Spécificités : Gestion des points, classement, boutique online avec prise de commande. Lancements d’emailings mensuels. |
||
|
|
||
![]() |
Alcatel Business Partner |
|
| Développement du site en PHP 5 / MySQL. Site réalisé en 5 langues : FR / ANG / ALL / ITA / ESP. Spécificités : Gestion compte points, challenges commerciaux, boutique cadeaux. Lancements d’emailings. |
||
|
|
||
![]() Cliquez pour agrandir |
The Rewards Catalog |
|
| Développement du site en PHP / MySQL. Boutique en ligne avec possibilités de commandes. Spécificités : Gestion de compte points, multilangues ( FR / ANG / ALL / ITA / ESP), Back-Office. |
||
|
|
||
![]() Cliquez pour agrandir |
Volvo Finance Race 2005 |
|
| Développement du site en ASP / SQL Server. Spécificités : Gestion de points, classement, boutique online avec prise de commande. Lancements d’emailings mensuels. |
||
|
|
||
![]() |
Business Object - Pôle Position |
|
| Développement du site en ASP / SQL Server. Spécificités : Gestion des points, classement des ventes, intégration d’un jeux à Instants Gagnants. Lancements d’emailings mensuels. |
||
|
|
||
![]() |
Renault Trucks Excellence Club |
|
| Reprise de l’existant : créations / modifications de pages. Retouche d’image. Langages utilisés :ASP, HTML/CSS. Mise en place d’un diaporama de photos. |
||
|
|
||
![]() |
Arval - Banque Populaire |
|
| Reprise de l’existant : créations / modifications de pages. Spécificités :Gestion des points, classement. |
||
|
|
||
![]() |
The Phone House - Carat |
|
| Reprise de l’existant : créations / modifications de pages. Lancement de challenges commerciaux Spécificités :Gestio |
||
























