Muchas veces necesitamos crear un sitio web corporativo o un blog bajo WordPress y nos encontramos con el problema de que el cliente necesita que esté operativo bajo más de un dominio, tal y como ocurre en el propio sitio web corporativo de APG que está plenamente operativo bajo los dominios http://artprojectgroup.es y http://artprojectgroup.es, o bajo más de un subdominio, como ocurre con Caravaning Blog in English, que está plenamente operativo bajo los subdominios http://english.caravaningblog.com y http://english.caravaningblog.es. Y aunque parece algo sencillo de realizar y que no debería producirnos ningún tipo de problema, no es así.

Para hacer posible que varios dominios o subdominios funcionen correctamente bajo una única instalación de WordPress y mostrando el mismo contenido, lo primero que tenemos que hacer es, obviamente instalar WordPress y configurarlo correctamente para que esté plenamente operativo. Tras ello vamos a instalar, además de los plugins habituales que más nos gusten, Domain Mirror, un simple y sencillo plugin que nos va a hacer la magia necesaria para que nuestro WordPress funcione correctamente bajo varios dominios.

Domain Mirror

Domain Mirror

Para configurar Domain Mirror sólo tenemos que ir a Ajustes -> Domain Mirror. Una vez allí veremos que podemos configurar el plugin simplemente pulsando el botón Get Current Domain, y obtendremos todos los datos que previamente hemos introducido en la configuración de nuestro WordPress. Podemos corregir aquellos datos que queramos modificar y guardamos todo pulsando Save Changes. Una vez guardado, es recomendable volver a abrir la pantalla de configuración mediante la ruta Ajustes -> Domain Mirror, pulsamos Add New Domain y repetimos el mismo proceso descrito, pero esta vez vamos a cambiar la extensión del dominio, o el propio nombre del dominio, y volveremos a guardar todo con Save Changes. Con estos simples y sencillos pasos ya tenemos nuestra instalación de WordPress totalmente operativa en los dominios que necesitamos, pero, ¿realmente está plenamente operativa? Pues la respuesta es no. ¿Qué falta para que esté plenamente operativa?

Obviamente, y gracias a Domain Miror, el comportamiento de WordPress es impecable y totalmente operativo en los dominios que hemos configurado, pero si tratamos de leer el archivo robots.txt o el archivo sitemap.xml, veremos que es el mismo en todos los dominios, incluso tendremos problemas para leer el archivo sitemap.xml si lo hemos generado con la ayuda del plugin Google XML Sitemaps. En APG utilizamos un pequeño truco de programación que os hará la vida mucho más sencilla.

Lo primero que vamos a hacer es crear unos archivos PHP que se van encargar de hacer la magia. Nosotros solemos utilizar 5 archivos, uno para el archivo robots.txt, llamado robots.php, otro para el archivo sitemap.xml, llamado sitemap-xml.php, otro para el archivo sitemap-image.xml, llamado sitemap-image.php, otro para el archivo sitemap-mobile.xml, llamado sitemap-mobile.php, y por último otro para el archivo sitemap-video.xml, llamado sitemap-video.php. El primer archivo lo creamos a mano, aquí tienes un ejemplo:

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/

Sitemap: http://www.nombrededominio.ext/sitemap.xml
Sitemap: http://www.nombrededominio.ext/sitemap-image.xml
Sitemap: http://www.nombrededominio.ext/sitemap-mobile.xml
Sitemap: http://www.nombrededominio.ext/sitemap-video.xml

El resto los generamos a partir de los plugin Google XML Sitemaps, Google XML Sitemap for Images, Google XML Sitemap for Mobile y Google XML Sitemap for Videos. El contenido del primer archivo necesario, robots.php, es este simple y sencillo código:

<?php
header( 'Content-Type: text/plain; charset=iso-8859-1' );
$archivo = implode( file( 'robots.txt' ) );
$archivo = str_replace( "www.nombrededominio.ext", $_SERVER['HTTP_HOST'], $archivo );
echo $archivo;
?>

Para el resto de los archivos el código que tenemos que utilizar son los siguientes, para el archivo sitemap-xml.php:

<?php
header( "Content-type: text/xml" );
$archivo = implode( '', file( 'sitemap.xml' ) );
$archivo = str_replace( "www.nombrededominio.ext", $_SERVER['HTTP_HOST'], $archivo );
echo $archivo;
?>

Para el archivo sitemap-image.php:

<?php
header( "Content-type: text/xml" );
$archivo = implode( '', file( 'sitemap-image.xml' ) );
$archivo = str_replace( "www.nombrededominio.ext", $_SERVER['HTTP_HOST'], $archivo );
echo $archivo;
?>

Para el archivo sitemap-mobile.php:

<?php
header( "Content-type: text/xml" );
$archivo = implode( '', file( 'sitemap-mobile.xml' ) );
$archivo = str_replace( "www.nombrededominio.ext", $_SERVER['HTTP_HOST'], $archivo );
echo $archivo;
?>

Y, por último, para el archivo sitemap-video.php:

<?php
header( "Content-type: text/xml" );
$archivo = implode( '', file( 'sitemap-video.xml' ) );
$archivo = str_replace( "www.nombrededominio.ext", $_SERVER['HTTP_HOST'], $archivo );
echo $archivo;
?>

Obviamente en todos los casos hay que cambiar el nombre de dominio y poner el dominio principal sobre el que está instalado WordPress. Por ejemplo, en nuestro caso hemos utilizado como dominio principal, aunque no lo es ya que es un alias de dominio, el nombre de dominio http://artprojectgroup.es. De esta forma cuando se abren los archivos robots.txt, sitemap.xml, sitemap-image.xml, sitemap-mobile.xml y sitemap-video.xml desde cualquiera de los nombres de dominio que utiliza nuestra instalación de WordPress, se cambiará de forma automática el nombre de dominio principal por el actual. Pero para ello necesitamos un último y sencillo paso, modificar el archivo .htaccess.

Para modificar el archivo .htaccess vamos a introducir estas líneas, ojo que si ya existe alguna de las 2 primeras líneas no hay que volver a introducirla, así como la última:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^sitemap.xml$ /sitemap-xml.php [L]
RewriteRule ^sitemap-image.xml$ /sitemap-image.php [L]
RewriteRule ^sitemap-mobile.xml$ /sitemap-mobile.php [L]
RewriteRule ^sitemap-video.xml$ /sitemap-video.php [L]
RewriteRule ^robots.txt$ /robots.php [L]
</IfModule>

Y gracias a estas sencillas modificaciones haremos que nuestro sitio web corporativo o blog sea completamente rastreado desde cualquiera de sus nombres de dominio por todos los buscadores de Internet.

Otro día hablaremos de la importancia de estos 5 archivos para ayudar a los buscadores web a rastrear el contenido completo de nuestro sitio web, es decir, para el SEO.

Por cierto, este truco con los archivos robots.txt y sitemap.xml, no son exclusivos de WordPress, lo podemos utilizar sobre cualquier trabajo que realicemos en el que se vayan a emplear más de un nombre de dominio, independientemente del CMS o aplicación web que utilicemos.

Actualización: Todos los plugins aquí indicados se han quedado obsoletos, recomendamos la lectura de la entrada ¿Es posible tener una única instalación de WordPress con múltiples nombres de dominio y múltiples bases de datos?, y utilizar los plugins allí descritos.