2010-03-02 21 views
31

Quiero construir un sitio ajax sin sacrificar SEO. Mi pregunta es: Si tengo enlace en mi página de la siguiente manera:Adjuntando hashtag a URL con javascript

<a href="http://example.com/cats" id="cats">Cats</a> 
    <a href="http://example.com/dogs" id="dogs">Dogs</a> 

... cuando se hace clic en cada enlace me gustaría actualizar la barra de direcciones con el hashtag correspondiente. Entonces, si se hace clic en el enlace "Cats", la ubicación actual será http://example.com/#cats y puedo usar esto para mostrar mi contenido ajax. Si javascript está desactivado o el usuario es motor de búsqueda, irá directamente a/cats

+2

Solo dos notas: 1) Eso no se llama un "hashtag" (que es jerga de Twitter para algo totalmente relacionado); se llama identificador de fragmento o identificador de anclaje (ver la especificación de HTML). 2) No debe tener un símbolo # en la identificación de un elemento, es decir, debería ser id = "gatos", que corresponderá a/some-url # cats. –

Respuesta

44

Usted puede cambiar la propiedad location.hash, que va a cambiar el identificador de anclaje actual sin tener que navegar lejos formar la página, por ejemplo, usted podría:

<a href="http://mysite.com/cats" id="cats" class="ajaxLink">Cats</a> 
<a href="http://mysite.com/dogs" id="dogs" class="ajaxLink">Dogs</a> 

continuación:

$('.ajaxLink').click(function (e) { 
    location.hash = this.id; // get the clicked link id 
    e.preventDefault(); // cancel navigation 

    // get content with Ajax... 
});​ 
+1

¡GUAU! No sabía que fuera así de fácil. Ahora puedo hacer que todos mis sitios futuros estén en ajax y aún así hacer que mi sitio sea rastreado e indexado. : D – alooficha

+0

Sin embargo, una sola cosa, si el usuario marca esta URL o hace clic en ella desde otro sitio, id no devuelve el hash actual. Vuelve vacío. ¿Hay una solución para esto? ¿Cómo puedo verificar el hash onload y el onclick? – alooficha

+1

Solo tiene que comprobar el valor de la propiedad 'location.hash' cuando se carga la página, contendrá el identificador, incluido el símbolo' # ', por ejemplo:' if (location.hash == '#dogs') { /*...*/} ' – CMS

0

No puede establecer window.location.href sin volver a cargar la página en javascript por razones de seguridad.

Por lo que he visto, algunas personas dicen que Google indexará # URL pero no se considerarán páginas separadas y creo que eso no es lo que quieres. También tengo muy poca experiencia con SEO.

-1

BenMills, nadie ha mencionado location.href, se trata de location.hash que no requiere recarga de la página.

0

A pesar de la simplicidad es mejor, pero si lo que desea es automatizar este proceso o que sea genericise entonces usted puede utilizar este plug-in Lite jquery.hashTag.js

$('a').hashTag({ 
    source: function() { 
     return $(this).attr('id'); 
    } 
    }); 

Sólo hay que poner este fragmento dentro ready $ (document).

Hará el resto del trabajo. Me gusta hacer clic automáticamente en el enlace cuyo ID se proporcionó como hash.

Cuestiones relacionadas