Hacer que mi WordPress con AJAX sea rastreable

12 ago 2011, 05:14:30
Vistas: 4.15K
Votos: 9

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!

2
Comentarios

¿Has pensado en generar un mapa del sitio? Por ejemplo, Yoast WordPress SEO genera automáticamente un mapa del sitio para tu contenido y lo envía a Bing, Google y Yahoo...

User User
14 sept 2011 20:55:18

+1 a la idea del mapa del sitio. Todavía estoy confundido acerca del parámetro de URL que se pasa para mostrar el sitio a Google, sin embargo. ¿Podrías pegar una URL que incluya tanto a) el contenido de la página como b) que funcione sin JavaScript? Si eso no existe, no hay nada que Google o Facebook puedan rastrear.

brandwaffle brandwaffle
23 dic 2011 17:43:30
Todas las respuestas a la pregunta 3
0

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.

31 ene 2012 20:44:15
0

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 :)

23 dic 2011 17:39:07
1

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.

http://visualise.ca/

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/

20 feb 2012 19:28:14
Comentarios

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

chrisguitarguy chrisguitarguy
20 feb 2012 20:19:56