2009-08-04 38 views
18

Uno de los sitios web tiene una URL como esta: example.oursite.com. Decidimos mover nuestro sitio con una URL como esta www.oursite.com/example. Para hacer esto, escribimos una regla de reescritura en nuestro servidor Apache que redirecciona a nuestra nueva URL con un código 301.Redirigir 301 con parte hash (ancla) #

Muchos sitios web nos vinculan con las URL del formulario example.oursite.com/#id=23. El problema es que la redirección borra la parte hash de la URL con IE. Hasta donde yo sé, la parte hash nunca se envía al servidor.

Quería implementar la redirección con javascript para mantener la parte de hash, pero el motor de búsqueda no sabrá que nuestra URL ha cambiado. (no se devolvió el código 301)

Quiero que el motor de búsqueda sea notificado de nuestra nueva URL (301) porque necesitamos transferir el rango de la página a nuestra nueva URL.

¿Hay alguna manera de redirigir con un código 301 y mantener la parte hash (#id=23) en la URL?

Respuesta

1

Puede crear una página en la dirección anterior que capte todas las solicitudes y redirija al nuevo sitio con la dirección y el código correctos.

Hice algo así, pero fue en asp.net, que supongo que no es el idioma que usa. De todas formas, debería haber una forma de hacerlo en cualquier idioma.

1

Al devolver el estado 301, se supone que su servidor debe devolver un encabezado 'Ubicación:' que apunta a la nueva ubicación. En la práctica, la forma en que se implementa varía; algunos servidores proporcionan la URL completa (netloc y ruta), otros solo proporcionan la nueva ruta y esperan que el navegador busque esa ruta en el netloc original. Parece que su regla de reescritura está quitando el camino.

Una manera fácil de ver lo que la cabecera Location devuelta es, en la cáscara de pitón:

>>> import httplib 
>>> conn = httplib.HTTPConnection('exemple.oursite.com') 
>>> conn.request('HEAD', '/') 
>>> res = conn.getresponse() 
>>> print res.getheader('location') 

Me temo que no sé lo suficiente sobre mod_rewrite para decirle cómo hacer la regla de reescritura correctamente , pero esto debería darte una idea de lo que tu servidor realmente le está diciendo a los clientes que hagan.

+0

impresionante, gracias. Sospeché que había una parte de ruta/ubicación que podría establecer. Nota para cualquier persona que lea, también puede usar fidler, wireshark o encabezados http vivos. – David

2

Estoy bastante seguro de que la parte del hash/página ancla/marcador de una URL no está indexada por los motores de búsqueda, y por lo tanto no tiene ningún efecto en el ranking de su página. Hacer una búsqueda en Google para "inurl: #" devuelve cero documentos, por lo que hace una copia de seguridad de mi suposición. Los enlaces de sitios externos se indexarán sin el hash.

Tiene razón en que la parte hash no se envía al servidor, por lo que tengo entendido, no hay una buena manera de poder crear una url de redirección con el hash en ella.

Debido a esto, depende del navegador administrar correctamente el hash durante un redireccionamiento. Firefox 3.5 parece hacer esto con éxito. Si agrega un hash a una URL que tiene un redireccionamiento conocido, verá el cambio de URL en la barra de direcciones a la nueva ubicación, pero el hash permanecerá allí con éxito.

Editar: En respuesta al comentario más abajo, si no no es un símbolo de sostenido en el URL externa de la pieza que necesita, entonces es muy posible volver a escribir la URL.Una regla de reescritura de Apache se haría cargo de ella:

RewriteCond %{HTTP_HOST} !^exemple\.oursite\.com [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteRule ^/(.*)   http://www.oursite.com/exemple/$1 [L,R] 

Si usted no está usando Apache, entonces usted tendrá que buscar en la documentación del servidor para algo similar.

+0

Tiene razón, SE no indexa la parte hash. Pero, por ejemplo, alguien en su sitio web podría publicar un enlace a un video en nuestro sitio. (Exemple.oursite.com/video_id=233) El enlace debería seguir funcionando para permitir que websurfer reproduzca nuestro video, pero la clasificación para ejemplificar. com necesita ser transferido a www.oursite.com/exemple –

+0

El ejemplo que acaba de dar en su comentario carece de un signo de almohadilla, por lo que es muy diferente a su pregunta original. Si esa es la URL que desea reescribir, entonces eso es posible y actualizaré mi respuesta. Debe aclarar su pregunta si este es el caso. – zombat

+1

google ignora '#'. Intenta buscar '#' (sin las comillas) en google ... por lo tanto, la prueba inurl: # no es válida. – David

0

He registrado mi cuenta, así que no puedo editarla.

zombat: Lo siento, he cometido un error en mi comentario. El enlace a nuestro video es exemple.oursite.com/#video_id=233. En este caso, mi regla de reescritura en Apache no funciona.

Nick Berardi: Cambiamos la forma en que funcionan nuestros enlaces. Ya no usamos #, solo para compatibilidad con versiones anteriores

+0

Estás casi en un arroyo sin una paleta de comparabilidad hacia atrás. La única forma en que veo que redirigir al usuario es a través de JavaScript, sin embargo, eso no va a resolver su problema de bot de búsqueda, pero como otros han dicho, el bot de búsqueda solo se ocupa de la parte que puede ser consultada, que no incluye la etiqueta hash –

0

Los bots de búsqueda no se preocupan por las etiquetas hash. Y si los está utilizando para algún tipo de llamadas flash o AJAX, tiene problemas más graves que los redireccionamientos 301 que no funcionan. Porque a menos que tengas el contenido en una forma alternativa, los motores de búsqueda no están indexando tu sitio y definitivamente estás sufriendo en lo que respecta al SEO.

+0

La otra cara de la moneda es que puede confiar en la no indexación SE del hash para canonicalizar contenido similar (rand fishkin hace una explicación decente aquí: http://www.seomoz.org/blog/whiteboard-friday- using-the-hash) y luego confíe en js para hacer su seguimiento – TMG

12

Los motores de búsqueda realmente se preocupan por las etiquetas hash, con frecuencia las utilizan para resaltar contenido específico en una página.

A la pregunta, sin embargo, las ubicaciones de los anclajes lamentablemente no se envían al servidor como parte de la solicitud HTTP. Si desea redirigir a un usuario, deberá hacer esto en Javascript en el lado del cliente.

Buen artículo: http://web.archive.org/web/20090508005814/http://www.mikeduncan.com/named-anchors-are-not-sent/

1

ya que el servidor nunca verán los # (descartando redirecciones 301) y Google tiene obsoleta su AJAX Crawling scheme, parece que una solución de front-end es la única manera!

¿Cómo lo hice:

(function() { 

    var redirects = [ 
     ['#!/about',   '/about'], 
     ['#!/contact',  '/contact'], 
     ['#!/page-x',  '/pageX'] 
    ] 

    for (var i=0; i<redirects.length; i++) { 
     if (window.location.hash == redirects[i][0]) { 
      window.location.replace(redirects[i][1]); 
     } 
    } 

})(); 

Estoy asumiendo que debido a los rastreadores de Google de hecho ejecutar Javascript, las nuevas páginas se indexarán correctamente.

Lo puse en una etiqueta <script> directamente debajo de la etiqueta <title>, para que se ejecute antes que cualquier otra JS/CSS. Tenga en cuenta que este script solo debe ser requerido para su archivo de índice.

+0

¿Terminó esto funcionando correctamente y preservando el SEO? –

+0

Las redirecciones funcionan bien, no puedo decir con certeza si funcionó para SEO – AlexKempton

Cuestiones relacionadas