WordPress por defecto muestra y trabaja siempre con URLs absolutas, del tipo http://misitio.com/wp-content/uploads/2013/10/mifoto.jpg
, que está muy bien para saber donde se almacenan las cosas pero para según que cosas no es lo más conveniente.
Hay varias situaciones en las que preferiríamos URLs relativas, del tipo /wp-content/uploads/2013/10/mifoto.jpg
, pero la principal es de cara a migraciones, no digamos para programadores que preparan sus desarrollos en local o IPs dedicadas a entornos de prueba, para luego subirlas al sitio del cliente.
Por otra parte, siempre es conveniente reducir el tamaño de página, y las URLs relativas «pesan» menos que las absolutas (básicamente son menos caracteres de código), algo siempre a tener en cuenta de cara a mejorar la experiencia de tus visitantes y, de paso, al posicionamiento en buscadores.
En cualquier caso, si necesitas que WordPress muestre las URLs relativas en vez de las absolutas puedes conseguirlo de dos maneras …
Índice de contenidos
… Convertir URLs absolutas en relativas con plugins …
Si eres de los que no le importa usar plugins para todas esas pequeñas cosas puedes hacerlo, de paso tendrás alguna funcionalidad más.
Este es el caso de WP HTML compression, una joyita que no solo sirve para acortar URLs convirtiéndolas automáticamente en relativas, también reduce el tamaño del HTML eliminando espacios en blanco, saltos de carro, tabuladores, e incluso puede hacerlo con códigos cortos del tipo pre
, script
, etc, y lo que es mejor: sin aceptar al resultado final de visualización del contenido. Ah, también es compatible con HTML5.
Si por algún motivo no quieres comprimir algún HTML simplemente envuelve la parte a «perdonar» así:
<!--wp-html-compression no compression--> Lo que sea que no quiero que se comprima <!--wp-html-compression no compression-->
Aquí tienes un ejemplo del resultado de su magia …
Hace lo que dice. Ahora bien, no es un plugin para usar en todos los casos y situaciones, analiza antes bien los resultados que obtienes.
Si te parece demasiado, puedes echar mano de este otro, Relative URL, pensado especialmente para desarrolladores, que acortará URLs del tipo http://localhost:8080/wp/
a otras así: /wp/
. O de algo de este tipo http://localhost:8080/wp/2013/10/14/hola-mundo/ a esto otro /wp/2013/10/14/hola-mundo/.
Simplemente lo activas y ya funciona.
Otra posibilidad es utilizar ese otro plugin, ABT relative URLs, que convierte en relativas todas las URLs absolutas contenidas en las entradas (href
, img
, etc). Si quieres tener más control puedes desactivar la conversión a voluntad como explica en la FAQ del plugin.
… Convertir URLs absolutas en relativas con código …
Por otra parte, si prefieres controlar de manera más exhaustiva todo lo que haces, y tener tu código de quita y pon, puedes usar unas líneas que harán la magia por ti.
Solo tendrías que añadir este código al fichero functions.php
del tema a utilizar o, mucho mejor, crear un plugin con el:
//URL absolutas a relativas function urls_relativas($input) { preg_match('|https?://([^/]+)(/.*)|i', $input, $matches); if (isset($matches[1]) && isset($matches[2]) && $matches[1] === $_SERVER['SERVER_NAME']) { return wp_make_link_relative($input); } else { return $input; } } function nowp_enable_root_relative_urls() { return !( is_admin() || in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php')) ); } $root_rel_filters = array( 'bloginfo_url', //Enlace a portada 'the_permalink', //Enlaces a entradas 'wp_list_pages', //Enlaces a páginas 'wp_list_categories', //Enlaces a categorías 'the_content_more_link', //Enlaces a "sigue leyendo" 'the_tags', //Enlaces a etiquetas 'get_pagenum_link', //Enlaces a entradas paginadas 'get_comment_link', //Enlaces a comentarios 'month_link', //Enlaces a archivo por meses 'day_link', //Enlaces a archivo por días 'year_link', //Enlaces a archivo por años 'tag_link', //Enlaces a archivo de tags 'the_author_posts_link', //Enlaces a archivos de autor 'script_loader_src', 'style_loader_src' ); add_filters($root_rel_filters, 'urls_relativas');
Lo que hemos hecho es un código muy limpio, utilizando la función de WordPress wp_make_link_relative
, incluida en el archivo /wp-includes/formatting.php
.
De este modo, cuando desde tu tema se haga una llamada a, por ejemplo, the_permalink
, aplicará la función wp_make_link_relative
a, digamos post_link
y usará la URL relativa.
Lo que conseguimos es que todas las URLs absolutas se conviertan en relativas sin modificar ni una línea de tu tema o las entradas, de manera automática.
Bueno, y hasta aquí como hacerlo, ahora la decisión …
… ¿Convierto las URLs absolutas en relativas? …
No te voy a negar que hay bastante polémica con este asunto de si usar URLs relativas o absolutas, especialmente en lo relativo al SEO.
Por ejemplo, está bastante claro que no se deberían usar URLs relativas si defines URLs canónicas, ya sea mediante algún plugin de SEO o un código o función, pues entraría en conflicto pues una URL canónica se supone que es la URL perfecta para un contenido, absoluta, y podrías confundir a los buscadores, algo que estos siempre penalizan metiendo una de las dos URLs en el cajón de «contenido duplicado«.
También te puede generar conflictos entre las URLs relativas usadas en la web y las que define el sitemap, normalmente absolutas, pues ofreces resultados distintos a los bots de los buscadores que, de nuevo, pueden decidir penalizarte por contenido duplicado.
Por otra parte, tiene todo el sentido usar URLs relativas en entornos de desarrollo, que no requerirán posteriormente hacer replaces
en la base de datos al subir el sitio al dominio en producción.
Otro punto a favor de las URLs relativas, como apunté al principio, es que reducen el tiempo de carga de la web por el simple motivo de que las URLs (el HTML en definitiva) son más cortas.
¿Cual es mi opinión?, pues que prefiero hacer un replace
con ese maravilloso plugin llamado Search & Replace a pasarme horas haciendo una auditoría SEO del sitio una vez publicado.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Otra buena idea de pasar de absolutas a relativas, es que disminuye la cantidad de peticiones HTTP.
Por eso reduce el tiempo de carga de la página.
Hola una duda, se puede hacer esto en un blog de este tipo:
http://artecolectiva.wordpress.com/
Gracias de antemano 🙂
Que va, en wordpress.com no dejan instalar plugins ni modificar código
Me parece un excelente aporte, sin embargo quiero aportar algo y tambien consultar. He activado las urls relativas en mi sitio, sin embargo lo hemos hecho pensando en tener un mismo sitio pero con dos servidores con funciones distintas. Lo que no lleva a la configuracion del dominio, puesto que con esto tendria dos ips, la mezcla es que los url relativos se activan muy bien el el direcctorio de instalacion primera ip pero cuando me voy a dominio publico no lee los archivos de sitemas. es algo interesante pues ahi puedo visualizar todo el funcionamiento del plugin que estoy utilizando pues en el dominio de instalacion las urls son relativas y automaticamente se antepone el dominio, pero cuando estoy el dominio publico las url relativas son las misma pero anteponiendo al dominio publico automaticamente, pero con una diferencia, ya que no lee totalmente los archivos de sistema. siempre aparecen por que el directoro de instalacion de wordpress.
Espero que si alguien a hecho algo parecido apreciaria su ayuda para ver que mas puedo hacer.
gracias
Hay muchas herramientas para las migraciones. Una muy sencilla y para mi la preferida es WP-CLI por línea de comandos. Ejemplo, solo se pone
wp search-replace «URLVIEJA» «URLNUEVA»
y todas las tablas de la base de datos se actualizarán con esa nueva URL. Con una sola línea de código, todo el sitio está migrado. y nos olvidamos de todos los problemas o cositas que tienen las url relativas.
Las velocidades de respuesta del servidor y carga del mismo sitio se pueden trabajar con diferentes lados de cache. Desde HEADERS con EXPIRES en los htaccess, y con plugins de cache desde wordpress.
Más allá de lo que pueda pensar u opinar me pareció un excelente aporte!
buenas tardes en que parte del functions.php debo pegar este código?
Otras cagada más de este desastroso gestorcillo. En comparación con Joomla o Drupal….. bueno, las comparaciones son odiosas y más en este caso, entre un juguetito o dos gestores webs profesionales.
Qué bobada (con cariño) acabas de decir ¿qué tendrá que ver el uso de urls absolutas y relativas con el gestor? Son opciones, y con WP están todas