Eliminar index.php de tu web sin ser penalizado por Google

Tamaño de letra:

"index.php" aparecía en todas las URL de la web

index.php tachadoEsta ha sido una decisión que he tardado mucho en tomar, tal vez demasiado. Todas las URL de esta web tenían el siguiente formato:

karmany.net/index.php/contenido...

Ese index.php aparecía en TODAS las URL de este sitio. Todos los enlaces entrantes a esta web tienen también un index.php y pensé que quitarlo directamente podría suponer algún dolor de cabeza: posible descenso de visitas, contenido y metadatos duplicados, enlaces de contenido con "index.php" etc.

Como consejo si acabas de crear recientemente tu web, es que pongas las URL amigables desde un principio. Evitarás todo esto.

Hace unas semanas me dije: si por intentar hacer las cosas bien, tengo que ser penalizado pues... ¡adelante! Tengo claro que no voy a dejar las URL con ese horrible index.php permanentemente. ¿Quieres ver todos los problemas que tuve y qué hice para que Google no me penalizara? Lee primero todo antes de hacer nada.

1.- URL amigable en la web

¿Por qué todas las URL tenían ese index.php? Eso se debía a que la web estaba hecha con Joomla! y existe una opción que te permite reescribir todas las URL. En el backend de Joomla! puedes ir al menú Sistema > Configuración Global > Configuración SEO > Usar la reescritura de URLs y poner SI. Desde Apache esto se realiza también con la ayuda del archivo .htaccess, mientras que desde IIS 7 se necesita el archivo web.config que viene por defecto en la instalación (además de instalar el módulo de reescritura de URL):

Configuración SEO en Joomla!

Como ves, lo que acabamos de conseguir es que nuestro sitio tenga las URL sin index.php pero ahora empiezan a surgir una serie de problemas:

  1. Contenido duplicado: Si no haces nada más, ahora tienes 2 URL distintas que apuntan a un mismo contenido: con index.php y sin index.php. Google se dará cuenta, y si no lo arreglas, puede penalizarte.
  2. Existen cientos de enlaces entrantes con index.php, ¿qué podemos hacer con ellos? Como verás en el punto 2, no los podemos dejar huérfanos, así que realizaremos una redirección permanente.
  3. Existen decenas o más de 1 centena de enlaces desde mi propia web ¿qué puedo hacer? Lo verás en el punto 4.

2.- Redirección .htaccess

Ahora hay 2 URL diferentes que van a un mismo contenido. ¿Qué dice Google que debemos hacer para evitar contenido duplicado? Una de las acciones que podemos realizar es una redirección permanente 301 desde el archivo .htaccess. Esto también es importante para no dejar huérfanas todas las URL que contienen index.php (por ejemplo, si decidieras poner un error 404 -no encontrado- a estas URL), porque existen muchos enlaces entrantes y también propios con index.php. Después de estrujarme un poco las neuronas y hacer pruebas con el archivo .htaccess, llego al siguiente código:

RewriteRule ^index\.php/(.+)$ http://www.karmany.net/$1 [R=301,L]

Copio y pego ese código en mi archivo .htaccess.

3.- Comprobar la redirección

Ahora voy a ver si Google reconoce esta nueva redirección y desde Herramientas para Webmaster de Google accedo a Rastreo > Explorar como Google, introduzco una URL cualquiera que contenga index.php, en el desplegable elijo, por ejemplo, Googlebot-Mobile: XHTML/WML y pulso el botón RECUPERAR. Cuando la solicitud se haya procesado, aparecerá un enlace y en la columna "Estado de solicitudes de rastreo" verás la palabra correcto con un link. Pulsa en ese correcto y verás algo parecido a esto:

Explorar como Google
Así es cómo el robot de Google ha recuperado la página.
URL: http://www.karmany.net/index.php/seguridad/49-general
Fecha: lunes, 24 de marzo de 2014, 10:43:38 GMT-7
Tipo de robot de Google: Googlebot-Mobile: XHTML/WML
Tiempo de descarga (en milisegundos): 224
HTTP/1.1 301 Moved Permanently
Server: ngx_openresty
Date: Mon, 24 Mar 2014 17:43:39 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 373
Connection: keep-alive
Location: http://www.karmany.net/seguridad/49-general
Cache-Control: max-age=0
Expires: Mon, 24 Mar 2014 17:43:39 GMT

Ya tenemos solucionado el problema con Google, las URL huérfanas y la redirección de todas las URL con index.php. ¿Qué queda? ...

4.- Reenviar el sitemap a Google

Aunque Google lo revisa periódicamente, es posible que tarde todavía un tiempo y esto significa que durante ese periodo de tiempo el robot de Google descubra contenido duplicado, ya que está leyendo URL del sitemap obsoleto. Tienes que reenviarle el nuevo sitemap de tu sitio con las URL ya corregidas. Esto lo haces desde las herramientas para webmaster de Google > Rastreo > Sitemap, seleccionas y tildas el sitemap y pulsas el botón "Volver a enviar".

5.- Eliminar todas las URL con index.php de nuestro sitio

Lógicamente, en nuestro sitio quedan muchos enlaces en el contenido (en los artículos) que llevan escrito el index.php. Dejarlos así es un poco "feo" así que puedes ir artículo por artículo buscando y modificando todos estos enlaces y tardar un par de siglos, o jugar un poco con phpMyAdmin y la base de datos.

Yo hice unas pruebas en local. En mi caso la tabla que contiene todo el texto de los artículos es: content y dentro de esta tabla, las columnas introtext y fulltext. Muchos enlaces existentes tienen la siguiente forma:

<a href="/index.php/...>Enlace</a>

Y quiero modificarlos dejando esto:

<a href="/...>Enlace</a>

Por lo tanto, la consulta SQL (después de probar unas cuantas) que hago es esta:

UPDATE content SET `introtext` = replace(`introtext`,'<a href="/index.php/','<a href="')

Y esta:

UPDATE content SET `fulltext` = replace(`fulltext`,'<a href="/index.php/','<a href="')

phpMyAdmin: SQL query

Del mismo modo y siguiendo esto último visto, puedes ejecutar consultas SQL para enlaces que no comiencen por <a href="/index.php/...

6.- ¿Decirle a los robots que no rastreen index.php? -NO

Y ¿qué ocurre si le decimos a los robots que no quieres que rastreen las URL que contengan index.php? Yo en mis pruebas añadí al archivo robots.txt lo siguiente:

Disallow: /index.php/

Y Google, al día siguiente me mostró el siguiente mensaje:

robots.txt bloquea

Hacer esto puede resultar una desventaja en vez de ayudarte porque puedes conseguir que los buscadores eliminen contenido importante de tu web. En tan poco tiempo, Google no ha indexado todas las URL sin index.php todavía y los otros buscadores tienes tus enlaces indexados con index.php.

Por consiguiente, no desactives index.php desde robots.txt porque eliminarás contenido hacia tu web.

Cierto es que Google empezó pocos días después a mostrarme 690 metadescripciones duplicadas pero, poco a poco, y sin modificar nada más que lo comentado en este artículo, las metadescripciones duplicadas descendieron hasta sus niveles iniciales.

Última actualización: Sábado, 19 Abril 2014
Comentarios  
+2 # Lorena 24-10-2015 18:02
Mil y una gracias!!!
Me estaba volviendo loca en mi ordenador con localhost y gracias a tu ejemplo todo ha ido a pedir de boca.
Esto me ha servido en localhost:
Código:RewriteRule ^index\.php/(.+)$ http://localhost/MiSitioLocal/ [R=301,L]
Responder | Responder con una citación | Citar
+2 # rolo 08-05-2015 04:33
eres un maldito genio T_T gracias bro
Responder | Responder con una citación | Citar
0 # Profesor 12-10-2014 02:31
Yo estoy pensando en hacerlo en mi web, aunque la verdad me tienen un poco asustado como puede afectar al posicionamiento ...
Responder | Responder con una citación | Citar
+1 # Eduardo 12-10-2014 10:32
Google, por ej, te indica que simplifiques la URL Checa esto. Cómo simplificar la estructura de direcciones URL
Responder | Responder con una citación | Citar
Escribir un comentario
Antes de publicar un comentario, usted debe aceptar nuestras condiciones de uso: Condiciones de uso. Debido al spam, todos los comentarios serán moderados. Normalmente se responde en unos minutos, refresca los comentarios para comprobarlo.



 
Visitas: 8495831