marzo 2018 - MorePagerank

Aprende a optimizar tus blogs para que sean los primeros en las busquedas

La opción más adecuada es decirle a Apache que queremos que WordPress gestione la página de error 410 usando en el archivo .htaccess una línea que indique donde tiene que mirar cuando ocurre un error 410; esto se hace usando ErrorDocument.
Todas las URLs que queremos que nos devuelvan un 410, las definimos en el .htaccess, utilizando una RewriteRule que use el flag G.
Puede uno pensar en establecer que ese archivo sea el 404.php de nuestro theme, pero no funciona al no cargar correctamente todo el entorno de WordPress.

Usando el código siguiente definiremos desde Apache las URLs que queremos que den error, pero usaremos WordPress para mostrar la página de error como para un 404. (O podemos personalizarla creando un template 410.php).

Para empezar, en el archivo .htaccess añadimos una línea de ErrorDocument:

ErrorDocument 410 /index.php?error=410

En el functions.php del theme, añadir el siguiente código:

/**
* Response header 410.
*
* @param string $template
* @return string
*/
function e12_response_410( $template ) {
    if( is_404() && '410' == $_SERVER['REDIRECT_STATUS'] ) {
      status_header( 410 );
      if( file_exists( STYLESHEETPATH . '/410.php' ) ) {
         return STYLESHEETPATH . '/410.php';
      }
   }
return $template;
}
add_filter( 'template_include', 'e12_response_410' );

Y terminamos añadiendo las reglas a Apache para que devuelva los 410 en las URL que queremos:

RewriteRule ^url-eliminada$ - [G,L]

Si has realizado de forma correcta todos los pasos, al realizar una petición de esa URL, nos debería devolver la misma página que un error 404, pero con la cabecera de un 410.

 

Si todo esto te parece muy complejo puedes usar el plugin 410 for WordPress, pero en cosas tan delicadas como devolver un 410 suelo preferir hacerlo a mano para asegurarme que no hay sorpresas.