Canonicalizacion con ASP
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 el de PHP ya que no se puede hacer la redirección canónica en un servidor Windows de otra manera si el servidor no tiene instalado ISAPI_REWRITE. Así que este trozo de código puede resultar muy útil si tienes tu web alojada en un servidor Windows.
Para obtener la redirección canónica con ASP, copia el siguiente código e insértalo en el fichero antes de cualquier otro código ASP o HTML. ¡Que no se te olvide cambiar el nombre del dominio!
<%
the_host = Request.ServerVariables("HTTP_HOST")
the_path = Request.ServerVariables("PATH_INFO")
the_query = Request.ServerVariables("QUERY_STRING")
if the_host <> “www.ejemplo.com” then
the_location = “http://www.ejemplo.com”
if the_path <> “/index.asp” then
the_location = the_location & the_path
end if
if the_query <> “” then
the_location = the_location & “?” & the_query
end if
Response.Status = “301 Moved Permanently”
Response.AddHeader “Location”, the_location
Response.End
end if
%>





He visto que en las herramientas para webmasters de Google (panel > menú izquierda > Herramientas > Establecer dominio preferido) existe la posibilidad de definir si el dominio se mostrará como www .midominio.com o midominio.com en su índice.
¡Por fin canonicalización total! Este código está en ASP VBScript y lo canonicaliza todo, jejeje.
- Canonicaliza el host: de www .example.com/loquesa a example.com/loquesea y viceversa.
- Canonicaliza el path: de host/loquesea/index.asp y host/loquesea/default.asp a host/loquesa/. Por supuesto también de host/index.asp y host/default.asp a host/
< %
target_host = "www .example.com" ' www .example.com or example.com
bredirect = false
the_host = Request.ServerVariables("HTTP_HOST")
the_path = Request.ServerVariables("PATH_INFO")
the_query = Request.ServerVariables("QUERY_STRING")
' Checking hostif the_host <> target_host then
the_location = target_host
bredirect = true
else
the_location = the_host
end if
' Checking path
if (Right(the_path,10) = "/index.asp" AND the_query = "") then
the_location = the_location & Left(the_path, Len(the_path)-9)
bredirect = true
elseif (Right(the_path,12) = "/default.asp" AND the_query = "") then
the_location = the_location & Left (the_path, Len(the_path)-11)
bredirect = true
else
the_location = the_location & the_path & the_query
end if
' Redirectif bredirect = true then
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", the_location
Response.End
end if
%>
Hola…gracias por el código…
Ahora tengo una pregunta ¿debe ser incluido al principio de CADA página o sólo al principio de la página principal (default.asp o index.asp)?
Les pregunto esto porque google tiene 5.000 urls indexadas de mi web y la misma sólo tiene algo como 2.000, lo cual indica que hay duplicación. A pesar de tener un pagerank de 3/10 y tener esa cantidad de urls indexadas aun no logro aparecer ni siquiera en las 5 primeras páginas para términos relacionados con el tema de mi web.
Saludos y muchas gracias,
Luis Vásquez
Hola de nuevo,
Acabo de probar y no me funciona el original. Le hice un par de cambios y ahora, al parecer ya funciona:
Cambios:
- En la línea 1 tiene un espacio entre www y .example
- En una de las últimas líneas tuve que cambiar
Response.AddHeader “Location”, the_location por
Response.AddHeader “Location”, “http://”&the_location
Por favor corrijanme si lo que hice no está bien.
Saludos,
Luis Vásquez
Hola Luis!
Lo de dejar un espacio en la URL es para que WordPress no detecte que es un enlace, así que efectivamente debes cambiar w ww.example.com por tu dominio sin espacios.
Tienes razón, falta el “http://”, muchas gracias.
Debes poner el código en todas tus páginas ya que este código no sólo te sirve para las páginas tipo index.asp o default.asp sino que también canonicaliza el dominio. Por ejemplo, de http: //posicionapro.com a http: //www.posicionapro.com/. David lo explica aquí: Canonicalizacion. Lo suyo es que incluyas el código dentro de un include que tenga todas las páginas.
Un saludo!
Hola a tod@s!
Es posible que en muchas ocasiones el código para eliminar index.asp o default.asp no funcione ya que el servidor no devuelve la variable Request.ServerVariables(”PATH_INFO”) correctamente. Es decir, que incluye index.asp o default.asp esté o no en el URL cayendo de esta manera en un bucle infinito de redirecciones. ¡Cada día me gusta menos ASP!