• Redireccionamientos 301 desde htaccess

    Publicado en septiembre 15, 2013 por en Seo, Seo On Page

    redireccionamiento 301 via htaccess

    Redireccionamientos 301 desde htaccess

    Cuando una página de nuestro sitio web es movida de directorio, renombrada o simplemente eliminada se hace imprescindible realizar alguna acción para que por un lado los buscadores sepan que esa url que tienen indexada ha cambiado o desaparecido y que por otro lado los usuarios cuando nos visiten tengan contenido disponible y no un error 404 de página no encontrada.

    En estos días he tenido que arreglar cositas en alguno de mis sitios web y te voy a contar cómo lo he solucionado, tal vez de esa forma con mi ejemplo,  puedas solucionar tu problema. 🙂

    Lo primero que debemos hacer es activar el mod_rewrite de Apache con esta primera instrucción:

    RewriteEngine on

    Redireccionar un subdominio a dominio principal

    El primer caso que se me planteó fue eliminar un subdominio y redireccionar  esa url sin contenido  al dominio principal.

    En algunos servidores con la opción RewriteRule es preciso poner antes Options +FollowSymlinks  que sirve para habilitar la entrada de enlaces simbólicos. En algunos casos si no está habilitado devuelve un error de servidor 500. En mi caso no ha sido preciso poner esa instrucción, pero si tienes que ponerla, se hace así:

    Options +FollowSymlinks

    RewriteCond %{HTTP_HOST} ^subdir\.dominio\.com$ [OR]

    RewriteCond %{HTTP_HOST} ^www\.subdir\.dominio\.com$

    RewriteRule ^/?$ “http\:\/\/www\.dominio\.com” [R=301,L]

    Con este grupo de instrucciones le digo que el subdominio subdir.dominio.com  tanto con  las 3w como sin ellas, redireccione a  http://www.dominio.com  de manera permanente.

    Esto lo he colocado en un archivo .htaccess dentro del mismo subdominio.

    Eliminar un subdirectorio y redireccionar la url a otra página

    Decidí eliminar un servicio de topsites que tenía  y en este caso la instrucción que puse en el .htaccess del root fue esta:

    RedirectMatch 301 ^/nombrecarpeta/(.*)$   http://www.dominio.com

    Con esto le digo que el subdirectorio nombredecarpeta y todo lo que contiene redireccione a la url principal de mi dominio.

    Eliminar contenido duplicado index.html, index.php

    Otro problema que tenía era que el dominio principal aparecía como dominio.com y dominio.com/index.html o dominio.com/index.php según la extensión de url que usase para hacer el index. Pues bien, esto lo he arreglado de esta manera:

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.html\ HTTP/

    RewriteRule ^(([^/]+/)*)index\.html$ http://www.midominio.com/$1 [R=301,L]

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.php\ HTTP/

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

    Canonicalización de la url

    Otro problema que me tocó solucionar fue el que la url se mostrase con las www aunque el usuario teclease el dominio sin las www.  Esto lo solucioné con este grupo de instrucciones:

    RewriteCond %{HTTP_HOST} ^midominio\.com[NC]

    RewriteRule ^(.*)$ http://www.midominio.com/$1 [R=301,L]

    Renombrar un directorio

    Fue muy sencillo, y el mismo ejemplo me sirve para renombrar una página también. ¡Imaginación al poder!

    Redirect 301 /directorioviejo/ http://www.midominio.com/nuevodirectorio/

     Las banderas

    Si os fijáis al lado de [R=301,L] en todas las instrucciones previas que os he mencionado hay una L, esto es una bandera que sirve para indicar un tipo de acción. Si hay varias banderas se separan por comas y siempre van entre corchetes tal como se muestra en el ejemplo.

    Algunas banderas con sus correspondientes significados son:

    • R: (redirect) para forzar una redirección HTTP
    • F: (forbidden) para prohibir el acceso
    • G: (gone) para eliminar la URL
    • P: (proxy) para pasar la URL a mod_proxy.
    • L: (last) para detener el procesamiento.
    • N: (next) para continuar
    • C: (chain) para encadenar la regla activa con la siguiente
    • F: (type) para obligar un determinado tipo MIME.
    • NS: (nosubreq) para segurarse que la regla sólo se aplica si no se realizan subpeticiones internas.
    • NC: (nocase) para que la URL no distinga mayúsculas de minúsculas.
    • QSA: (qsappend) para añadir una nueva cadena de consulta (query string) en lugar de sustituirla.
    • PT: (passthrough) para asar la URL modificada a otro módulo apache.
    • S: (skip) para saltar la siguiente regla.
    • E: (env) para asignar una variable de entorno.

    Web accesible por IP

    Soy la “tia problemas” :), es verdad, pero lo bueno que tengo es que yo veo la oportunidad de aprender y solucionar en vez de la de tropezar y por tanto la de crecer. Creo que en cuestión de redireccionamiento me tropecé con todos o casi todos los casos disponibles, ¡qué locura! O al menos a mi me pareció una locura mientras los iba solucionando :).

    Bien, en mi web para niños tenía un problema de contenido duplicado porque la web era accesible tanto por tu IP como por su nombre de dominio. Si ese es tu problema, tiene fácil solución, yo lo arreglé así:

    RewriteCond %{HTTP_HOST} ^00\.00\.000\.000  <– Obvio aquí pones tu número de IP

    RewriteRule (.*) http://www.midominio.com/$1 [R=301,L]

    Redireccionar urls dinámicas

    Hace tiempo, mucho tiempo, tenía un foro instalado en uno de mis dominios y lo eliminé. Pensaba que todas las urls estarían ya eliminadas de Google pero cual ha sido mi sorpresa que al recibir seoparanewbies.com un enlace desde mi otra web anunciando su creación, he visto que me aparecían enlaces con una estructura que ya no existía desde hace al menos 3 años en el hosting.

    www.midominio.com/?a=lost_pw
    www.midominio.com/?a=stats&u=AmorEterno
    www.midominio.com/?a=stats&u=Alma www.midominio.com/?a=stats&u=AmorEterno&all_reviews=1 www.midominio.com/?a=user_cp
    www.midominio.com/?action=printpage;topic=2614.0

    Si os fijáis todas las urls guardan un patrón: nombre de  url/identificador=   y lo agrupé en tres grupos de instrucciones:

    Caso 1

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?a=(.+)&u=(.+)\ HTTP/

    RewriteRule ^$ http://www.midominio.com? [L,R=301]

    Con este Rewrite incluyo todas las urls del dominio del tipo midominio.com/?a=grupodecaracteres&u=grupodecaracteres y además como ya no existe lo redirecciono con un 301 con las banderas R de forzar redirección y L para detener el procesamiento. Se corresponde con este patrón: www.midominio.com/?a=stats&u=AmorEterno

    Caso 2

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?a=(.+)\ HTTP/

    RewriteRule ^$ http://www.midominio.com? [L,R=301]

    Con estas dos instrucciones la estructura es más simple aún pues todo lo que hay antes de \? Es lo que corresponde a la url del dominio, y a partir de \ le digo que lo que haya después de ?a= y cualquier grupo de caracteres (que corresponden sólo a ese identificador) lo redireccioné forzando la redirección a la url principal. Se corresponde con este patrón: www.midominio.com/?a=lost_pw

    Caso 3

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?action=(.+)topic=(.+)\ HTTP/

    RewriteRule ^$ http://www.midominio.com? [L,R=301]

    Esta es la que más me costó solucionar porque lleva dos identificadores pero no están unidos por & pero finalmente después de conseguido lo que quería no me pareció tan complicado. En este caso tengo un identificador que es action=grupo de caracteres y otro que es topic=grupo de caracteres. Se correspondería a este caso concreto: www.midominio.com/?action=printpage;topic=2614.0

    Incluso me encontré por la web una página que era un generador para convertir urls dinámicas en urls estáticas y además redireccionar las dinamicas a las estáticas para evitar contenido duplicado. No me solucionó al 100% la papeleta pero si me sirvió para entender la dinámica de este tipo de urls. Me ayudé también de la página de Apache y sus explicaciones sobre el mod rewrite.

    Por el momento mis coqueteos con los redireccionamientos tienen un “standby”, pero no descarto amplicar este artículo – chuleta si me surge el tener que solucionar otro tipo de redirección que aquí no contemplo.

    Espero que mis aventuras y desventuras con los redireccionamientos y el contenido duplicado te sean de utilidad. Gracias por leerme y si te apetece, ya sabes jeje ¡a compartir!.

    Por otra parte si lo que necesitas es un consultor SEO te recomiendo que visites http://www.juanmigueldiaz.com/

    ¡Que tengas un buen día!

24 Respuestas en el tema.

  1. Harley Baron dice:

    Muy buen articulo, correctamente explicado, muchas gracias y felicitaciones.

  2. Dani dice:

    Me estaba pasando lo del contenido duplicado por que mi sitio era accesible por IP, gracias a tu ayuda pude solucionar ese inconveniente, genial!

  3. […] un direccionamiento 301, esto se hace muy fácilmente modificando el fichero “.htaccess”. Es bastante común que como utilizamos un bloc de notas para editarlo, luego nos lo guarde con […]

  4. gesdiweb dice:

    Vaya curro te has pegao hija mia xD. Muy muy bueno. Salu2

  5. dani dice:

    Hola, Lilian. Desde que me puse a arreglar cosas de mi página, necesitaba ayuda para hacer la conolización de mi dominio, y el trozo de la web accesible por IP, y lo he encontrado en tu blog.
    Sigo arreglando cosas, y tengo un problema en mi tienda, y es que no funcionan los enlaces de pagina 2 o siguiene, dándome el error 404. Lo he mediosolucionado, pero tengo que tocar los permalinks. Ya lo he hecho, y la página funciona bien, pero no caí, en que todas las urls de productos que tengo indexadas y las urls de otras páginas hacia la mía, en el momento de tocar las permalinks, dejan de funcionar. He leído en algún sitio que se puede redireccionar un patrón hacia otro. De momento he vuelto a la configuración inicial, hasta que sepa como hacer esta redirección. Te ha pasado o conoces la solución a este tema?
    No se si me he explicado bien. Soy muy nuevo, y voy soltando las cosas según las leo.
    Gracias de antemano y un saludo.

  6. dani dice:

    Aunque tengo más problemillas, de momento me ha servido mucho esta entrada, sobretodo lo de la canolización de la ip. Comparto

    Muchas gracias

  7. Roberto dice:

    Buenas tardes, me doy cuenta que si sabes de redirecciones y por esto te pido si puedes ayudarme con algo que me está dando vueltas la cabeza. Me están saliendo títulos duplicados de esta forma: rsanahuano.com/la-moda-de-ser-inculto-y-vulgar/la-moda-de-ser-inculto-y-vulgar1-2/ que no tiene contenido dolo la imagen del post, como te darás cuenta en donde dice “vulgar1-2/” quiere decir que hay otra url con el número 1. Ahora la ruta correcta es http://rsanahuano.com/la-moda-de-ser-inculto-y-vulgar/ por esto google ya me sancionó hace como dos años y recién me estoy recuperando, tengo códigos que hacen redirecciones en .htacss pero no sé porque ya no funcionan incluso en funtion.php también tengo otro código que redireccionaba las url con imágenes como adjuntos pero también no sé porqué parece que no surte efecto. Me podrías decir cual de las que has expuesto más arriba me puede servir en este caso? Ya tengo como 230 URL de esta forma. Por favor.

  8. AJDM dice:

    Excelente tutorial, ahora bien quisiera saber algo:
    1.- Como sería la regla si lo que deseo es que indistintamente de lo que contenga el URL, siempre se muestra al usuario el nombre del dominio.
    Tengo mas dudas pero una a la vez jejejeje.
    Gracias mil por adelantado.

  9. Andrés Forero dice:

    Hola Lilian, qué buen artículo, bastante completo. Tengo un problema al que le he dedicado varias horas y no he podido resolver.

    Resulta que tengo una landing page en Joomla! así: http://www.dominio.com/index.php/landing y quiero utilizar un subdominio tipo: landing.dominio.com para “enmascarar” dicha landing.

    Intenté crearlo por cPanel pero redirecciona sin enmascarar.

    Ahora estoy intentando por .htaccess así:

    Agregué el registro DNS
    landing.dominio.com. 100 IN CNAME http://www.dominio.com

    Modifiqué el .htaccess del sitio así:
    RewriteCond %{HTTP_HOST} ^landing\.dominio\.com [NC]
    RewriteRule (.*) https://www.dominio.com/index.php/landing [P,R=301,L]

    Pero recibo un 500 Internal Server Error. ¿Cuál crees que puede ser mi error? Gracias de antemando por tu atención.

  10. juan dice:

    buenas.
    tengo un problema bastante grave con varias webs.
    pero estoy hablando en concreto de esta http://www.porchesdemadera.biz que lo tenia hecha con websitex5 antes, y ahora esta hecha con dreamweaver y cambiada por completo,.tengo contenido duplicado y aparte cuando miro en google para ver si esta indexada la nueva web, sale todavia la antigua.
    he creado la sitemap.xml y lo le subido a google webmaster tools y nada.
    he perdido muchas posiciones con todas mis webs por culpa del duplicado.
    necesito ayuda urgente.

    gracias

  11. […] a través del archivo .htaccess, redireccionando desde la versión no deseada, hacia la deseada. Acá tenés una guía para hacer […]

  12. Agustin dice:

    Hola Lilian,
    Llevo con un problema ya un tiempo, a ver si me ayudas con el. He cambiado mi web a wordpress, antes la tenia hecha con incomedix5 (vamos paginas html), el dominio sigue siendo exactamente el mismo, sin las www. El contenido ha cambiado aunque el concepto de la web es el mismo. Pues bien Google sigue mostrando las páginas antiguas html y creo que debería tener un redireccionamiento 301 ya que creo que ha afectado bastante a mi posicionamiento.
    He intentado varios como ;
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^miweb\.es

    RewriteRule (.*) http://miweb.es/$1 [R=301,L]

    RedirectMatch 301 (.*)\.html$ http://www.example.com$1/

    Y algunos más… el único que me hace el redirecionamietno correcto es este:

    redirectMatch 301 ^(.*)$ http://www.miweb.es$1
    Pero me da error de bucle.

    Que me aconsejas..?
    Gracias
    Ah y en mi servidor me han dicho que esta todo bien y que hay un bucle que nunca acaba. 🙁

    • Lilian dice:

      Entiendo que las paginas html ya no están de modo que de lo que se trata es que cuando el navegador haga una petición a tu hospedaje vea si existe el archivo o carpeta que solicita, sino existe que muestre el index.php y si existe pues que lo muestre. Entonces lo que deberías poner después de todas las redirecciones que tengas hechas es algo como esto:
      # BEGIN WordPress

      RewriteEngine On
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]

      # END WordPress
      Las dos líneas de rewritecond se ocupan precisamente de hacer esta verificación.
      Espero que te sirva.
      Un saludo.

      • Agustin dice:

        Primero gracias por tu respuesta. Lo he probado y no me redirecioan se queda igual. miweb.es/index.html.

        El caso que en algún foro me dicen que el super cache ya me esta haciendo el redirecionamiento al .php

        Lo que no te dije es que también cambié el hosting.Ya ha pasado un tiempo y parece como si hubiese perdido todo el posicinamiento del dominio anterior que es el mismo “nombre nombre”.
        Pensando que iba ha ser mejor resulta que he montado una gorda. Sera que google ha dado el antigo dominio como desindexado? y empieza de nuevo. Uffff, si me puedes decir algo más perfecto. También tenia un wordpress.com aparte con las noticias pero mi gran error fue que lo borré por completo (antes las noticias las exporte y las importe en mi nuevo apartado del wordpress.org)y ahora estan las entradas desperdigadas por google. Alguna alternativa.

        Gracias y un saludo

        • Agustin dice:

          Perdon Lilian. Tenia este código abajo del todo.

          # BEGIN WordPress

          RewriteRule ^index\.php$ – [L]
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteRule . /index.php [L]

          # END WordPress

          Sabrias decirme si puedo tener el código del plugin super cache duplicado aún dandome el text correcto?

  13. Tepillao dice:

    Menos mal que te encontré… (esto no es parte de una cita XD)

    Pero muchisimas muchisimas gracias, para los neofitos como yo que si cambian un codigo destrozan una web. Todo lo que encontraba era técnico y ole tu, con tu informacion me has salvado de una buena que ya iba para el desastre.

    Se me ocurrió cambiar de script mi web y claro, las visitas que venían de google no lo tenían claro y batacazo miles de paginas con error 404 y mas de 2000 visitantes perdidos en el limbo. Y con tu explicación de redireción, están volviendo.

    Te debo una.

  14. David dice:

    Muchas gracias Lilian por la info, me ha servido para redireccionar una carpeta al dominio principal.

    Un saludo 😉

  15. […] una redirección 301 desde tu archivo .htaccess. Esto no es difícil, aunque es un poco técnico. Acá tenés una guía para ver que tenés que hacer en el caso que quieras arreglar los problemas por tu cuenta. Yo igual […]

  16. Alvaro dice:

    Hola tengo un problema que a lo mejor tú me puedes solucionar… Estoy rediseñando una web: clave2.com, está en flash y es horrible.
    He creado un archivo index html que se carga cuando introduces clave2.com/index.html

    Lo que querría es conseguir que cuando alguién meta clave2.com se redireccione a clave2.com/index.html

    He buscado el código completo del .htacces y me he vuelto loco sin conseguir el objetivo.

    Podrías ayudarme, por favor. De antemano te doy las gracias y te invito a unas cañas si nos vemos… Un saludo

    • Lilian dice:

      Alvaro, eso que pretendes es un poco ilógico. Cuando alguien entra a un dominio tipo midominio.com el navegador lo primero que hace es buscar un archivo index.. puede ser index.html, index.htm o index.php, si no encuentra ninguno entonces te da un error 404. De modo que si tu has creado ese index.html cuando alguien acceda a tu dominio necesariamente se va a cargar 🙂 aunque tu no veas en el navegador index.html.

      Un saludo,
      Lilian.

  17. JaiRo dice:

    Te recomendaria algo cambiar esa letra amarilla, hay que forzar mucho la ojos para verla. Esta muy buena toda esta info pero ni la he podido leer por eso.

    • Lilian dice:

      Hola Jairo, no es amarilla es como anaranjada tirando a marrón. Quizás tu gráfica es antigua y por eso la ves mal, tomo nota y cambiaré los colores por otros. Gracias por tu comentario 🙂

  18. gat dice:

    Hola.
    Muchas gracias por compartir tu información.
    Tengo una duda.

    Si elimino las extensiones de las urls mediante .htaccess, tengo que usar la redirección 301 de las url con extensión hacia las nuevas para que no se considere contenido duplicado?

    Gracias

    • Lilian dice:

      Hola gat, gracias por tu comentario. Efectivamente deberias hacer un redireccionamiento 301 pero no ya por contenido duplicado porque se supone que al modificar las urls no están duplicadas, sino porque esas urls ya están indexadas en internet y de lo que se trataría es de evitar errores 404 o página no encontrada. Siempre que se cambie una url de nuestra web/blog se debe hacer un 301 para evitar un 404. Espero que esto te ayude.
      Un saludo y feliz año!


Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

CERRAR
Leer entrada anterior
comprimir-gzip
Compresión de archivos mediante Gzip

Habilitar la compresión Gzip Uno de los mensajes que nos suele dar Pagespeed Insaights de Google sino tenemos habilitada la...

Cerrar