Un problema comune nei siti costruiti con WordPress è dovuto all’indicizzazione non voluta di pagine create automaticamente dal cms.

In questo post vediamo come evitare che le pagine generate per gli allegati, come le immagini o altri tipi di file, compaiano su google oppure come eliminarle se già presenti.

Alla fine del post troverai uno script da includere nel file functions.php del tema wordpress.

Cosa sono gli allegati (Attachment) di WordPress

Se gli articoli appartengono al post type post, le pagine al post type page, gli allegati costituiscono un post type separato: gli attachment.

Per visualizzare la pagina di un allegato basta conoscere il suo id

http://mio-sito.it/?attachment_id=23

Per evitare che le pagine degli attachment compaiano nei motori di ricerca è necessario eseguire un redirect 301 verso un’altra pagina del sito cioè bisogna dire a google che la risorsa è stata spostata in maniera permanente.

Tipi di allegati

Gli allegati possono essere suddivisi in due tipi

  1. Allegati associati a un post: sono quelli caricati nell’editor degli articoli o delle pagine
  2. Allegati indipendenti: sono quelli caricati nella pagina Media>Aggiungi nuovo

Vediamo come appaiono i tipi di allegato nel database:

database-allegati-post

Nella tabella wp_posts è presente un articolo (id=656) a cui è associata un’immagine (id=657) attraverso la colonna post_parent.  Nell’ultima riga della tabella si nota un allegato (id=659) non associato a nessun post (post_parent=0)

Redirect in base al tipo di attachment

A questo punto possiamo creare una funzione che effettua un redirect verso il post contente l’immagine oppure verso l’home page del sito, se l’allegato era stato inserito tramite l’uploader dei Media.

La funzione sarà inserita nell’action hook template_redirect quindi eseguita prima del caricamento del template.

// functions.php

add_action( 'template_redirect', 'isw_attachment_redirect' );
function isw_attachment_redirect()
{

	global $post;

	if ( is_attachment() )
	{

		if (  is_numeric( $post->post_parent ) && $post->post_parent != 0  )
		{
			wp_redirect( get_permalink( $post->post_parent ) , 301 );
		}

		elseif ( is_numeric( $post->post_parent ) && $post->post_parent == 0 )
		{
			wp_redirect( get_home_url(), 301 );
		}

		exit();
	}

}

  inStileWeb.com
blog comments powered by Disqus