Создание AJAX-сайта на WordPress доступным для краулеров
Я прочитал следующее и пытаюсь применить эту схему к своему сайту на WordPress: http://code.google.com/intl/fr-CA/web/ajaxcrawling/index.html
Если вы посетите мой сайт по адресу http://www.visualise.ca/, вы увидите, что он загружает записи на главной странице, и URL меняется на http://visualise.ca/#!/anne-au-cherry при загрузке этой записи. Статическая версия того же контента доступна для краулера по адресу http://visualise.ca/anne-au-cherry, но если посетитель заходит через браузер, он будет перенаправлен на http://visualise.ca/#!/anne-au-cherry (это делается с помощью JavaScript).
Чтобы предоставить краулеру необходимый параметр ?_escaped_fragment_=
, я использовал хак для WordPress, найденный в сети: http://www.wordpress-fr.net/support/sujet-54810-add-action-parse-request, и теперь GoogleBot может видеть содержимое моих AJAX-страниц. Я думал, что всё готово.
Но когда я вставляю ссылку на запись в Facebook, он не может прочитать содержимое страницы, поэтому я предположил, что мой сайт не совсем соответствует схеме, описанной в документации Google, поскольку Facebook её поддерживает (если вставить http://twitter.com/#!/gablabelle, это сработает). Так как я использую плагин jQuery.address для работы с хэшбэнгом (#!), я зашёл на их сайт и скачал примеры файлов, чтобы увидеть различия между их файлами и моими, и понял, что они, вероятно, используют PHP-функцию для создания необходимых HTML-снимков: https://github.com/bartaz/jquery-address/blob/master/samples/crawling/index.php, потому что, как я думаю, именно поэтому Facebook не может прочитать мой контент.
<?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 = 'Страница не найдена!';
header(php_sapi_name() == 'cgi' ? 'Status: 404' : 'HTTP/1.1 404');
}
?>
Я предполагаю, что мог бы использовать подобную PHP-функцию для предоставления HTML-снимков вместо использования хака для WordPress, но мне нужно адаптировать её для WordPress. Проблема в том, что я не программист и сделал всё, что мог.
Мои записи имеют такой формат: http://visualise.ca/#!/anne-au-cherry, а статическая версия доступна по адресу http://visualise.ca/anne-au-cherry (где anne-au-cherry - это ярлык записи, который меняется в зависимости от просматриваемой страницы).
Итак, мой вопрос: может ли кто-нибудь подтвердить, что я на правильном пути, и, если возможно, помочь создать эту PHP-функцию?
Большое спасибо за ваше время и помощь!

Конкретно ИЗБЕГАЙТЕ использования "hashbang" ("!#") для обеспечения индексируемости AJAX-сайтов на WordPress.
Вам действительно не стоит использовать метод "hashbang" на сайте WordPress.
"!#" больше похож на временный костыль для сайтов, которые не могут предоставить статический аналог своей AJAX-версии. В целом Google не рекомендует использовать этот метод, если есть альтернативы.
Нет никаких преимуществ в реализации системы hashbang в WordPress. AJAX-решение для фронтенда WordPress должно работать в рамках существующей схемы URL (без хешей и восклицательных знаков).
Итог: WordPress по своей природе индексируем; просто не ломайте его, используя hash-bang.

Если вы столкнулись с проблемой, когда Facebook некорректно отображает мета-информацию вашей страницы, вам стоит обратить внимание на плагин OpenGraph для WordPress, так как он добавляет соответствующие метаданные с атрибутами og:. http://wordpress.org/extend/plugins/opengraph/
Также вы можете добавить в заголовок страницы ссылку такого вида:
<link rel="canonical" href="link_back_to_real_post_url">
И посмотреть, поможет ли это.
Хотя я должен спросить: зачем вам это нужно? Twitter подвергся серьезной критике именно из-за такой структуры URL, так как её сложно обрабатывать. Не то чтобы вы не должны этого делать, но мне очень интересно узнать причину :)

В итоге я не стал использовать хэшбэнги, как предлагал WraithKenny.
Используя плагин jQuery address с методом $.address.state(value) для установки базового пути сайта, который используется в HTML5 state management, и метод $.address.value(value) для установки текущего значения глубоких ссылок, мне удалось достичь желаемого.
Посты (кликните на миниатюру изображения) загружаются через AJAX, и URL изменяется одновременно. Посты существуют самостоятельно, используя, конечно, ту же структуру постоянных ссылок, поэтому они полностью индексируемы.
Единственная проблема будет для старых браузеров, которые, как я думаю (нужно проверить), всё ещё будут видеть хэшбэнги.
Поскольку я не разработчик, мне потребовалось много времени, чтобы разобраться. :-/ Но теперь я вполне доволен результатом ;-)
jQuery address: http://www.asual.com/jquery/address/

Посмотрите плагин jQuery pjax. https://github.com/defunkt/jquery-pjax Он очень похож, но сам загрузит контент за вас и т.д. Вот пример того, как я использовал его для дочерней темы Twenty Eleven https://github.com/chrisguitarguy/pjaxy
