Hacer que mi WordPress con AJAX sea rastreable
Leí lo siguiente e intenté aplicar este esquema a mi sitio web que funciona con WordPress: http://code.google.com/intl/fr-CA/web/ajaxcrawling/index.html
Si visitas mi sitio web en http://www.visualise.ca/ verás que carga las publicaciones dentro de la página principal y la URL se convierte en http://visualise.ca/#!/anne-au-cherry cuando se carga esta publicación. Una versión estática del mismo contenido está disponible para el rastreador en http://visualise.ca/anne-au-cherry pero si un visitante que usa un navegador la visita, será redirigido a http://visualise.ca/#!/anne-au-cherry (esto se hace con javascript).
Para proporcionar al rastreador el ?_escaped_fragment_=
necesario, utilicé un hack de WordPress que encontré en la red: http://www.wordpress-fr.net/support/sujet-54810-add-action-parse-request y ahora GoogleBot puede ver el contenido de mis páginas con AJAX. Pensé que todo estaba hecho.
Pero cuando pego un enlace de publicación en Facebook (por ejemplo), no puede leer el contenido de la página, así que supuse que mi sitio web no respeta realmente el esquema descrito en la documentación de Google, ya que Facebook lo soporta (si pegas http://twitter.com/#!/gablabelle funcionará). Como estoy usando el plugin jQuery.address para obtener mi hashbang (#!), fui a su sitio web y descargué sus archivos de ejemplo para ver las diferencias entre sus archivos y los míos, y me di cuenta de que probablemente están usando una función php para crear las instantáneas HTML necesarias: https://github.com/bartaz/jquery-address/blob/master/samples/crawling/index.php porque esto es, supongo, por lo que Facebook no puede leer el mío.
<?php
error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));
$fragment = $_REQUEST['_escaped_fragment_'];
$file = 'data/' . (isset($fragment) && $fragment != '' && $fragment != '/' ? preg_replace('/\//', '', $fragment) : 'home') . '.xml';
$re = '/(^<[^>]*>)|(\n|\r\n|\t|\s{2,4})*/';
$handle = fopen($file, 'r');
if ($handle != false) {
$content = preg_replace($re, '', fread($handle, filesize($file)));
fclose($handle);
} else {
$content = '¡Página no encontrada!';
header(php_sapi_name() == 'cgi' ? 'Status: 404' : 'HTTP/1.1 404');
}
?>
Así que supongo que podría usar una función php similar para servir las instantáneas HTML en lugar de usar el hack de WordPress, pero necesitaría adaptarlo a WordPress. El problema es que no soy programador y he hecho lo mejor que he podido hasta ahora.
Mis publicaciones están en este formato: http://visualise.ca/#!/anne-au-cherry y la versión estática está disponible en http://visualise.ca/anne-au-cherry (Donde anne-au-cherry es el slug de la publicación y cambia dependiendo de la página que estemos viendo).
Así que mi pregunta es: ¿alguien podría confirmar que voy por el camino correcto y, si es posible, también ayudar a crear esa función php?
¡Muchas gracias por tu tiempo y ayuda!

Específicamente EVITA usar "hashbang" ("!#") para hacer que los sitios WordPress con AJAX sean rastreables.
Realmente no querrás usar el método "hashbang" en un sitio WordPress.
El "!#" es más como un parche improvisado para sitios que no pueden proporcionar una versión estática análoga a su versión AJAX. Su uso en general no es recomendado por Google a menos que no haya alternativa disponible.
No hay ningún beneficio en implementar un sistema hashbang en WordPress. Una solución AJAX en el front-end para WordPress debería funcionar con el esquema de URL existente (sin hash, sin bang).
Resumen: WordPress es naturalmente rastreable; simplemente no lo rompas usando hash-bangs.

Si te refieres específicamente a que Facebook no muestra correctamente la información meta de tu página, deberías revisar el plugin OpenGraph para WordPress, ya que agregará los metadatos og:attribute apropiados. http://wordpress.org/extend/plugins/opengraph/
Además, puedes agregar un enlace como este en el encabezado:
<link rel="canonical" href="link_back_to_real_post_url">
Y ver si eso hace algo.
Sin embargo, tengo que preguntar, ¿por qué estás haciendo esto? Twitter ha recibido muchas críticas por esta estructura de URL precisamente porque es difícil de rastrear. No digo que no deberías hacerlo, pero tengo mucha curiosidad por saber cuál es la razón :)

Lo que hice realmente fue no usar hashbangs como sugirió WraithKenny.
Utilizando el plugin jQuery address con el método $.address.state(value) para establecer la ruta base del sitio web que se utiliza en la gestión de estados HTML5 y el método $.address.value(value) para establecer el valor actual de deep linking, pude lograr lo que deseaba.
Las publicaciones (haz clic en una miniatura de imagen) se cargan mediante AJAX y la URL cambia al mismo tiempo, las publicaciones existen por sí mismas usando, por supuesto, la misma estructura de permalinks, por lo que es completamente rastreable.
El único problema será para navegadores más antiguos que, creo (necesita verificarse), seguirán viendo los hashbangs.
Como no soy desarrollador, me tomó mucho tiempo entenderlo :-/ Pero estoy bastante contento con los resultados ahora ;-)
jQuery address: http://www.asual.com/jquery/address/

Echa un vistazo al plugin jQuery pjax. https://github.com/defunkt/jquery-pjax Es muy similar pero se encargará de cargar el contenido por ti, etc. Aquí tienes un ejemplo de lo que hice con él para un tema hijo de Twenty Eleven https://github.com/chrisguitarguy/pjaxy
