Canonicalizacion con PHP

Si tu web está alojada en un servidor que no tiene mod_rewrite habilitado, no puedes usar htaccess para canonicalizar el dominio (Ej. redirigir http://ejemplo.com a http://www.ejemplo.com).

La solución es insertar el siguiente código en el header antes de cualquier otro código PHP o HTML.

<?php
$redirect = false;
$path = $_SERVER['REQUEST_URI'];
$url = $_SERVER['HTTP_HOST'];
if ($url != 'www.ejemplo.com') {
$redirect = true;
}

if ($redirect==true){
header(’HTTP/1.1 301 Moved Permanently’);
header(’Location: http://www.ejemplo.com’ .$path);
}
?>

Obviamente hay reemplazar “www.ejemplo.com” con el dominio de tu web. ;)

Compartir este artículo:
  • del.icio.us
  • Google Bookmarks
  • Meneame
  • Technorati
  • BlogMemes Sp
DavidM
Acerca de DavidM
DavidM lleva trabajando en los campos del marketing por Internet y el posicionamiento en buscadores desde el año 2004. Puede ver su biografía aquí.

10 comentarios para el post “Canonicalizacion con PHP”

  1. Comentario de sara el 13 de Octubre de 2008 a las 14:42

    Muchas gracias David, este código es muy útil. ¿Nos podrías decir cuáles son las ventajas de la canonicalización, por favor?

  2. Comentario de Canonicalizacion con ASP | Redireccionar a www con ASP | PosicionaPro el 28 de Octubre de 2008 a las 13:32

    [...] suscribete por email o por RSS. ¡Gracias por tu visita!.El otro día escribí sobre cómo canonicalizar los dominios con PHP. Ahora toca hacer lo mismo con ASP. De hecho, este código ASP puede ser mucho más práctico que [...]

  3. Comentario de Quitar Smart Quotes de Wordpress | PosicionaPro el 2 de Noviembre de 2008 a las 18:30

    [...] pero si quieres mostrarles a los lectores de tu blog algún tipo de código como el código para canonicalizar las URLs con PHP, estas comillas que Wordpress crea automáticamente acaban siendo como un grano en el [...]

  4. Comentario de sara el 19 de Noviembre de 2008 a las 18:53

    Con este código conseguimos que todas las URLs del tipo http: //ejemplo.com/lo-que-sea sean http ://www.ejemplo.com/lo-que-sea.

    Pero si también se quiere contemplar el caso de http ://www.ejemplo.com/index.php o http ://ejemplo.com/index.php se redirija a http ://www.ejemplo.com/ hay que poner alguna cosa más. Así que he modificado un poco este código con lo que el resultado ha sido éste:

    $redirect = false;
    $path = $_SERVER['REQUEST_URI'];
    $url = $_SERVER['HTTP_HOST'];
    if ($url != 'www.ejemplo.com' || $path == '/index.php') {
    $redirect = true;
    }

    if ($redirect==true){
    header('HTTP/1.1 301 Moved Permanently');
    if ($path == "/index.php") {
    header('Location: http ://www.ejemplo.com');
    } else {
    header('Location: http ://www.ejemplo.com' .$path);
    }
    }

    ¡Espero que os sirva!

  5. Comentario de sara el 5 de Diciembre de 2008 a las 12:43

    Todavía mejor.

    - Canonicaliza el host: de www .example.com/loquesa a example.com/loquesea y viceversa.
    - Canonicaliza el path: de host/loquesea/index.php a host/loquesa/. Por supuesto también de host/index.php a host/

    < ?php
    $target_host = "www .example.com"; // www .example.com or example.com
    $redirect = false;
    $path = $_SERVER['REQUEST_URI'];
    $host = $_SERVER['HTTP_HOST'];

    // Checking host
    if ($host != $target_host) {
        $redirect = true;
        $host = $target_host;
    }
    $url = $host.$path;

    // Checking path
    $pattern = "^(.*)(/index\.php)$^";
    preg_match_all($pattern, $url, $match);
    if ($match[0][0] != "") {
        $redirect = true;
        $url = $match[1][0] . "/";
    }

    // Redirect
    if ($redirect){
        header('HTTP/1.1 301 Moved Permanently');
        header('Location: http ://'.$url);
    }
    ?>

  6. Comentario de Chema el 25 de Septiembre de 2009 a las 03:46

    Utilizo éste último código que pegaste Sara y me funciona de maravilla, pero como logro quitar la barra / al final??

    Saludos y gracias

  7. Comentario de DavidM el 25 de Septiembre de 2009 a las 11:06

    Que yo sepa, solo se puede quitar la barra con mod_rewrite. No se me ocurre ninguna manera de conseguirlo con PHP. De todas formas, lo investigo y si encuentro una solcución con PHP, la publicaré aquí.

  8. Comentario de Chema el 18 de Octubre de 2009 a las 06:08

    Hola que tal, cuando los usuarios cierran sesión en mi web, los mando a /index.php?CerrarSesion=Salir , como puedo hacer la redirección 301 para mandarlos a /index.php ??

    Saludos

  9. Comentario de sara bosch el 19 de Octubre de 2009 a las 14:54

    Hola Chema, pues todo depende de como lo tengas programado. De todas maneras Google llega alguna vez al enlace /index.php?CerrarSesion=Salir? es decir, lo ha llegado a indexar?

    Sino se me ocurre algo tan sencillo como poner un rel=nofollow en el enlace de cerrar sesión. Por lo que me cuentas con esto bastará.

  10. Comentario de jfuste el 18 de Febrero de 2010 a las 13:48

    Estupendo este código! Me viene de perlas…

    En un portal Joomla, si quieres integrar aplicaciones de terceros, como Coppermine, foros, etc, hay que canonicalizar la url, si no, es imposible que la validación de usuario funcione bien entre aplicaciones. Así que de nuevo gracias por el aporte!

Escribe un comentario

Entradas realcionadas

  1. Canonicalizacion con ASP
  2. Canonicalizacion