Создание моего WordPress с поддержкой AJAX для сканирования


9

Я прочитал следующее и пытаюсь применить эту схему к моему веб-сайту, на котором работает 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 для получения своего hashbang (#!), Я зашел на их сайт и скачал их образцы файлов, чтобы увидеть, в чем заключаются различия между их файлами и моими, и понял, что они, вероятно, используют функцию 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 = 'Page not found!';
        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?

Большое спасибо за ваше время и помощь!


5
Вы думали о создании карты сайта? Например, Yoast WordPress SEO автоматически генерирует карту сайта для вашего контента и отправляет ее в Bing, Google и Yahoo ...

+1 к идее карты сайта. Однако я все еще не понимаю, какой именно URL-адрес используется для показа сайта в Google. Не могли бы вы вставить URL, который включает в себя а) содержимое страницы и б) работает без JavaScript? Если этого не существует, Google или Facebook не смогут сканировать.
brandwaffle

Ответы:


4

В частности, избегайте использования hashbang ("! #"), Чтобы сделать сайты WordPress на платформе AJAX доступными для сканирования.

Вы действительно не хотите использовать метод hashbang на сайте WordPress.

"! #" Больше похож на хакерский патч для сайтов, которые не могут предоставить статический аналог своей версии AJAX. Его использование в целом не рекомендуется Google, если нет альтернативы.

Нет никакой пользы от внедрения системы hashbang в WordPress. Внешнее AJAX-решение для WordPress должно работать на основе существующей схемы URL (без хэша, без взрыва).

Резюме: WordPress естественно сканируется; просто не разбивайте его, используя хэш-челки.


1

Если вы имеете в виду, что Facebook неправильно отображает метаинформацию для вашей страницы, вам следует заглянуть в плагин OpenGraph для WordPress, поскольку он добавит соответствующие метаданные og: attribute. http://wordpress.org/extend/plugins/opengraph/

Также вы можете добавить такую ​​ссылку в шапку

<link rel="canonical" href="link_back_to_real_post_url">

И посмотри, поможет ли это.

Я должен спросить, хотя, почему ты это делаешь? Твиттер подвергся серьезной критике за эту структуру URL именно потому, что это ползти боль. Не говорю, что вы не должны этого делать, но довольно любопытно, в чем причина :)


1

На самом деле я не использовал хэш-банг, как предложил WraithKenny.

Использование плагина адреса jQuery с методом $ .address.state (value) для установки базового пути сайта, который используется в управлении состоянием HTML5, и метода $ .address.value (value) для установки текущего Значение глубокого связывания я смог сделать то, что я хотел.

http://visualise.ca/

Посты (нажмите на миниатюру изображения) загружаются через AJAX, и URL-адрес изменяется одновременно, посты существуют сами по себе, используя, конечно, ту же структуру постоянных ссылок, поэтому они полностью просматриваются.

Единственная проблема будет для старых браузеров, которые, я думаю, (должны быть проверены), все еще видят хэш-банг.

Так как я не разработчик, мне потребовалось много времени, чтобы понять. : - / Но я вполне доволен результатами сейчас ;-)

JQuery адрес: http://www.asual.com/jquery/address/


1
Взгляните на плагин jQuery pjax. github.com/defunkt/jquery-pjax Это очень похоже, но позаботится о загрузке контента для вас и т. д. Вот пример того, что я сделал с ним для темы «Двадцать одиннадцать детей» github.com/chrisguitarguy/pjaxy
chrisguitarguy
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.