Utilice PushState y precomposición
La forma actual (2015) de hacer esto es usando el método pushState de JavaScript.
PushState cambia la URL en la barra superior del navegador sin volver a cargar la página. Digamos que tiene una página que contiene pestañas. Las pestañas ocultan y muestran contenido, y el contenido se inserta dinámicamente, ya sea usando AJAX o simplemente configurando display: none y display: block para ocultar y mostrar el contenido de pestaña correcto.
Cuando se hace clic en las pestañas, use pushState para actualizar la url en la barra de direcciones. Cuando se representa la página, use el valor en la barra de direcciones para determinar qué pestaña mostrar. El enrutamiento angular lo hará automáticamente.
Precomposición
Hay dos formas de acceder a una aplicación PushState Single Page (SPA)
- A través de PushState, donde el usuario hace clic en un enlace de PushState y el contenido se incluye en AJAX.
- Al presionar la URL directamente.
El golpe inicial en el sitio implicará golpear la URL directamente. Los éxitos posteriores simplemente AJAX en el contenido a medida que PushState actualiza la URL.
Los rastreadores recopilan enlaces de una página y luego los agregan a una cola para su posterior procesamiento. Esto significa que para un rastreador, cada golpe en el servidor es un golpe directo, no navega a través de Pushstate.
La precomposición agrupa la carga útil inicial en la primera respuesta del servidor, posiblemente como un objeto JSON. Esto permite que el motor de búsqueda muestre la página sin ejecutar la llamada AJAX.
Hay alguna evidencia que sugiere que Google podría no ejecutar solicitudes AJAX. Más sobre esto aquí:
https://web.archive.org/web/20160318211223/http://www.analog-ni.co/precomposing-a-spa-may-become-the-holy-grail-to-seo
Los motores de búsqueda pueden leer y ejecutar JavaScript
Google ha podido analizar JavaScript desde hace algún tiempo, es por eso que originalmente desarrollaron Chrome, para actuar como un navegador sin cabeza con todas las funciones para la araña de Google. Si un enlace tiene un atributo href válido, se puede indexar la nueva URL. No hay nada más que hacer.
Si, al hacer clic en un enlace, se activa una llamada pushState, el usuario puede navegar por el sitio a través de PushState.
Soporte de motores de búsqueda para URL de PushState
PushState es actualmente compatible con Google y Bing.
Google
Aquí está Matt Cutts respondiendo a la pregunta de Paul Irish sobre PushState para SEO:
http://youtu.be/yiAF9VdvRPw
Aquí está Google anunciando soporte completo de JavaScript para la araña:
http://googlewebmastercentral.blogspot.de/2014/05/understanding-web-pages-better.html
El resultado es que Google admite PushState e indexará las URL de PushState.
Consulte también la búsqueda de herramientas para webmasters de Google como Googlebot. Verás que tu JavaScript (incluido Angular) se ejecuta.
Bing
Aquí está el anuncio de Bing de soporte para bonitas URL de PushState con fecha de marzo de 2013:
http://blogs.bing.com/webmaster/2013/03/21/search-engine-optimization-best-practices-for-ajax-urls/
¡No uses HashBangs #!
Las URL de Hashbang eran una solución fea que requería que el desarrollador proporcionara una versión pre-renderizada del sitio en una ubicación especial. Todavía funcionan, pero no necesitas usarlos.
Las URL de Hashbang se ven así:
domain.com/#!path/to/resource
Esto se emparejaría con una metaetiqueta como esta:
<meta name="fragment" content="!">
Google no los indexará de esta forma, sino que extraerá una versión estática del sitio de la URL _escaped_fragments_ e indexará eso.
Las URL de estado de inserción se parecen a cualquier URL normal:
domain.com/path/to/resource
La diferencia es que Angular los maneja por usted al interceptar el cambio en document.location que lo trata en JavaScript.
Si desea utilizar las URL de PushState (y probablemente lo haga), elimine todas las URL y metatags de estilo hash y simplemente habilite el modo HTML5 en su bloque de configuración.
Probar su sitio
Las herramientas para webmasters de Google ahora contienen una herramienta que le permitirá buscar una URL como google y representar JavaScript como lo hace Google.
https://www.google.com/webmasters/tools/googlebot-fetch
Generando URL de PushState en Angular
Para generar URL reales en Angular, en lugar de # prefijas, configure el modo HTML5 en su objeto $ locationProvider.
$locationProvider.html5Mode(true);
Lado del servidor
Como está utilizando URL reales, deberá asegurarse de que su servidor envíe la misma plantilla (más algún contenido precompuesto) para todas las URL válidas. La forma de hacerlo variará según la arquitectura de su servidor.
Mapa del sitio
Su aplicación puede usar formas inusuales de navegación, por ejemplo, desplazarse o desplazarse. Para garantizar que Google pueda manejar su aplicación, probablemente sugiera crear un mapa del sitio, una lista simple de todas las URL a las que responde su aplicación. Puede colocar esto en la ubicación predeterminada (/ sitemap o /sitemap.xml), o informar a Google al respecto utilizando las herramientas para webmasters.
Es una buena idea tener un mapa del sitio de todos modos.
Soporte del navegador
Pushstate funciona en IE10. En navegadores antiguos, Angular volverá automáticamente a las URL de estilo hash
Una página de demostración
El siguiente contenido se representa utilizando una URL pushstate con precomposición:
http://html5.gingerhost.com/london
Como se puede verificar, en este enlace , el contenido está indexado y aparece en Google.
Sirviendo códigos de estado de encabezado 404 y 301
Debido a que el motor de búsqueda siempre llegará a su servidor para cada solicitud, puede servir códigos de estado de encabezado desde su servidor y esperar que Google los vea.