Eliminare i rel=”nofollow” dai link nei commenti di Wordpress

Come eliminare questo specifico filtro e, trasversalmente, ogni altro filtro o azione in Wordpress.

In Wordpress i link inseriti nei commenti vengono automaticamente editati, inserendo l’attributo rel con valore nofollow.

rel="nofollow" indica ai motori di ricerca che lo interpretano (tra cui Google) di ignorare quel link.

Questo, stando a quanto scritto sul Google Blog, servirebbe a prevenire lo spam nei commenti. Anche se, e chi gestisce un blog Wordpress da qualche tempo forse potrÃ?  confermarlo, questa prevenzione non è che sia molto efficace :P

Se a questa considerazione aggiungiamo che:

  • Dipende dal blog e dipende dal commento, ma, in linea di massima, un link postato in un commento si presume sia a tema con il post e che ne approfondisca il contenuto. E che quindi valorizzi il post stesso (sia per chi legge sia per i motori di ricerca).
  • Con tutti i plugin per Wordpress anti spam, in primis Spam Karma 2 e Akismet, Captcha, domande sceme, metodi alternativi per i più originali e moderazione dei commenti… abbiamo davvero bisogno di questa ulteriore precauzione?

Io credo di no, e quindi l’ho eliminata. Se vi interessa vi spiego come.

Referenze.

Un po’ di teoria, intanto che ci siamo :)

Ci sono due funzioni che inseriscono il rel="nofollow" in un link, entrambe definite nel file /wp-includes/functions-formatting.php: wp_rel_nofollow() e make_clickable().

  1. wp_rel_nofollow() inserisce il rel="nofollow" solo in link HTML (es. <a href="http://www.google.it">Google/</a> viene trasformato in <a href="http://www.google.it" rel=”nofollow”>Google/</a>).

    I commenti vengono dati in pasto a questa funzione con l’hook pre_comment_content nel file /wp-includes/default-filters.php:

    add_filter('pre_comment_content', 'wp_rel_nofollow', 15);

    Questo operazione viene eseguita solo alla pubblicazione del commento.

  2. La funzione make_clickable() trasforma un URL in un link ed inserisce in questo link l’attributo rel="nofollow".

    I commenti vengono passati a questa funzione con add_filter('comment_text', 'make_clickable'), sempre nel file /wp-includes/default-filters.php, e l’operazione viene eseguita ogni volta che si visualizza un commento.

Bypassare wp_rel_nofollow() e make_clickable().

Il modo più evidente per bypassare wp_rel_nofollow() è eliminare dal file /wp-includes/default-filters.php il codice add_filter('pre_comment_content', 'wp_rel_nofollow', 15);.

Ma evitare di modificare il codice sorgente è spesso una buona idea. CosÃ?¬, almeno, ogni volta che aggiorneremo la nostra versione di Wordpress non dovremo preoccuparci di tutte le parti che abbiamo modificato.

Ecco quindi la seconda soluzione: usare la funzione remove_filter(). Per eliminare un filtro esistente, dobbiamo fornire a questa funzioni gli stessi parametri dati ad add_filter(). Nel nostro caso:

remove_filter('pre_comment_content', 'wp_rel_nofollow', 15);

Se volessimo eliminare un’azione, potremmo usare la stessa funzione o l’alias remove_action(), è indifferente, fanno la stessa cosa.

Con la funzione make_clickable() potremmo fare la stessa cosa, ma cosÃ?¬ facendo perderemmo anche la conversione degli URL in link. Quindi possiamo fare una funzione che utilizzi la funzione make_clickable() e che ne modifichi l’output:

function custom_make_clickable($ret){
	$return = make_clickable($ret);
	return str_replace('rel="nofollow"', '', $return);
}

Magari usando un espressione regolare, per fare in modo che rel="nofollow" sia sostituito solo nei link e non nel testo:

function custom_make_clickable($ret){
    $return = make_clickable($ret);
    return preg_replace('#<a(.+)(rel="nofollow"|rel='nofollow')(.*)>#Us', "<a$1$3>", $return);
}

O creare una copia della funzione make_clickable() ed eliminare la parte che inserisce il rel="nofollow":

function custom_make_clickable($ret) {
    $ret = ‘ ‘ . $ret;
    // in testing, using arrays here was found to be faster
    $ret = preg_replace(
        array(
            ‘#([s>])([w]+?://[w#$%&~/.-;:=,?@[]+]*)#is’,
            ‘#([s>])((www|ftp).[w#$%&~/.-;:=,?@[]+]*)#is’,
            ‘#([s>])([a-z0-9-_.]+)@([^,< nr]+)#i’),
        array(
            ‘$1<a href=”$2″ rel=”nofollow”>$2</a>’,
            ‘$1<a href=”http://$2″ rel=”nofollow”>$2</a>’,
            ‘$1<a href=”mailto:$2@$3″>$2@$3</a>’),$ret);
    // this one is not in an array because we need it to run last, for cleanup of accidental links within links
    $ret = preg_replace(”#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i”, “$1$3“, $ret);
    $ret = trim($ret);
    return $ret;
}

E fare in modo che venga eseguita questa, anzichÃ?© l’originale:

remove_filter('comment_text', 'make_clickable');
add_filter('comment_text', 'custom_make_clickable');

Ma questo codice dove lo mettiamo?

Io direi in un plugin ad uso personale. Creiamo un file PHP, magari potremmo chiamarlo my-hacks.php, ed inseriamoci:

<php
/*
Plugin Name: Personal hacks
*/
function custom_make_clickable($ret){
    $ret = ' ' . $ret;
    // in testing, using arrays here was found to be faster
    $ret = preg_replace(
        array(
            '#([s>])([w]+?://[w#$%&~/.-;:=,?@[]+]*)#is',
            '#([s>])((www|ftp).[w#$%&~/.-;:=,?@[]+]*)#is',
            '#([s>])([a-z0-9-_.]+)@([^,< nr]+)#i'),
        array(
            '$1<a href="$2">$2</a>',
            '$1<a href="http://$2">$2</a>',
            '$1<a href="mailto:$2@$3">$2@$3</a>'),$ret);
    // this one is not in an array because we need it to run last, for cleanup of accidental links within links
    $ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3“, $ret);
    $ret = trim($ret);
    return $ret;
}
remove_filter(’pre_comment_content’, ‘wp_rel_nofollow’, 15);
remove_filter(’comment_text’, ‘make_clickable’);
add_filter(’comment_text’, ‘custom_make_clickable’);
?>

Mettiamolo nella cartella dei plugin ed attiviamolo dal pannello di amministrazione dei plugin.

CosÃ?¬ ora abbiamo anche un nostro plugin in cui inserire le varie utility che creeremo durante la nostra esperienza di blogger Wordpress (magari qualcuna la proporrÃ?² anch’io nei prossimi post :)

Eliminare il nofollow dai link degli autori

Fino a qui abbiamo visto come eliminare il nofollow dai link postati nel contenuto del commento. Per eliminarli anche da i link degli autori dei commenti, potete aggiungere questo:

function rimuovi_nofollow($return){
    return str_replace(array('rel="external nofollow"', 'rel=\'external nofollow\''), 'rel="external"', $return);
}

add_filter('get_comment_author_link', 'rimuovi_nofollow');
Hai trovato interessante questo articolo? Se vuoi, inscrivendoti alla newsletter, puoi ricevere una notifica ogni volta che c'è un nuovo articolo da leggere, oppure puoi sottoscrivere il feed RSS. Se non sai cos'è puoi leggere: Cos'è e come si legge un feed.
di Francesco Terenzani, 27 November 2006

post<li>

tag: , , , , , .

post correlati:


Commenti (22). Commenti in formato RSS

  1. Andrea Micheloni scrive:

    Interessante, esistono dei plugin un po’ più avanzati che, per esempio, tolgono il nofollow solo dopo un tot di tempo, in modo che in ogni caso l’autore del blog possa cancellare eventuale spam.

    Tra l’altro non ricordo bene, ma mi pare che il nofollow fosse aggiunto come rel="external nofollow", quindi penso che lo str_replace vada modificato..

  2. Francesco Terenzani scrive:

    Comodo come plugin, anche se per ora Spam Karma ha fatto passare giusto un paio di commenti di spam :)

    Bo’, guardando il codice (sia PHP che l’output HTML) WP aggiunge solo rel="nofollow", ma in effetti lo str_replace andrebbe sostituito con un preg_replace ed un espressione regolare, per non rischiare di perdere anche i commenti che contengono la parola rel=”nofollow”. E allora tanto vale copiare la funzione originale ed eliminare le parti che aggiungono il nofollow. Modifico il post! :D

  3. Francesco Terenzani scrive:

    [quote comment=”906″]Tra l’altro non ricordo bene, ma mi pare che il nofollow fosse aggiunto come rel="external nofollow", quindi penso che lo str_replace vada modificato..[/quote]

    Quello viene aggiunto nel link dell’autore del commento :P

  4. amici scrive:

    Scusate, ma perchè non togliamo tutti il nofollow, se cmq i commenti vengono moderati? in questo modo possiamo premiare tutte le persone che postano sul blog, aiutandolo a restare vivo

  5. costa smeralda scrive:

    Bene annulliamo tutti i links cosÃ?¬ poi il pagerank non c’è più e la finiamo di rompere i c….

  6. Pingback: Eliminare il nofollow è un vantaggio! « COMMUNICATIONDESIGN.

    […] è quanto, chiaramente, spiega Francesco Terenziani nel suo blog. Stefano Gorgoni, nel suo ultimo post , che ho trovato davvero troppo interessante e […]

  7. Pingback: links for 2007-07-16 at Bio-Etica.it - Blog.

    […] Eliminare i rel=”nofollow” dai link nei commenti di Wordpress (tags: google plugin wordpress) […]

  8. Pingback: giowind.eu » Blog Archive » links for 2007-07-16.

    […] Eliminare i rel=”nofollow” dai link nei commenti di Wordpress (tags: google plugin wordpress) […]

  9. Pingback: Do Follow! (…wordpress blog comments) SchininÃ? .it - LogBook » Blog Archive.

    […] Per evitare ciÃ?² possiamo ad esempio seguire le complete (ma complicate) istruzioni indicate qui (link preso sempre a prestito da Uncino.net, ma questo è l’ultimo credito!), oppure, senza […]

  10. Pingback: Nofollow, una pratica da non seguire piÃ?Æ?ù | Tecnologia.

    […] Credo nelle affermazioni di Stefano e vedrÃ?Æ?Ã?² di fare in mondo che Pandemia torni all’era prima del nofollow, con l’intercessione del padrone di casa. Se credi in questa filosofia, agire Ã?Æ?è facile. […]

  11. Trackback: ...time is what you make of it....

    Qualche novitÃ? sul blog……

    Oggi è stata una giornata di pulizie… dopo aver sistemato le faccine, ho rivisto la lista dei plugin che utilizzo.
    Ho eliminato alcuni plugin e… svuotato per benino la tabella wp_options che erroneamente era rimasta piena di record creati …

  12. annamaria scrive:

    Ho fatto la stessa cosa sul mio blog

  13. hidaba scrive:

    tolto anche sul mio blog

  14. Pingback: Rimuovere il tag nofollow e fidelizzare gli utenti.

    […] Eliminare i rel=ââ?¬Ânofollowââ?¬Â dai link nei commenti di Wordpress […]

  15. Matteo Gallinucci scrive:

    Assololutamente d’accordo a rimuovere il nofollow, è inutile, non risolve il problema dello spam e penalizza gli utenti.

  16. Sergejpinka scrive:

    Per eliminarli anche da i link degli autori dei commenti, potete aggiungere questo:

    si ok ma dove va inserito?

  17. Fra_T scrive:

    Ciao Sergejpinka,
    il codice è da mettere in un plugin. Se ti servono maggiori informazioni prova a leggere il punto di questo post “Ma questo codice dove lo mettiamo?”

  18. valerio scrive:

    se ho capito bene,chi inserisce un link in un sito con il no no follow dovrebbe trarne beneficio aumentando il proprio pr mentre al sito dove si commenta…non succede nulla,giusto?

  19. isaacisback scrive:

    grande! non vedo l’ora di farlo a un mio blogguzzo xD

  20. Antonio Milanese scrive:

    Ma non è un po’ una truffa… cioè se blog come blogspot lo tolgono di default, non è per evitare spam o commenti inutili?

  21. Leonardi Paolo scrive:

    Attenzione alle lettere accentate (). Riguardo il no follow, io credo che toglierlo porti due vantaggi: in primo luogo una sorta di “premio” per chi commenta e aggiunge contenuti al blog; secondariamente è un modo per indurre a commentare

  22. giangi scrive:

    Scusate, ma perchè non togliamo tutti il nofollow, se cmq i commenti vengono moderati? in questo modo possiamo premiare tutte le persone che postano sul blog, aiutandolo a restare vivo

Scrivi un commento

XHTML: Puoi usare questi tag XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>