Tworzenie mojego WordPressa do indeksowania opartego na AJAX

9

Przeczytałem poniższe i próbuję zastosować ten schemat do mojej witryny z systemem WordPress: http://code.google.com/intl/fr-CA/web/ajaxcrawling/index.html

Jeśli odwiedzisz moją stronę internetową http://www.visualise.ca/ , zobaczysz, że ładuje posty na stronie głównej, a adres URL zmienia się na http://visualise.ca/#!/anne-au-cherry, kiedy to post jest załadowany. Statyczna wersja tej samej treści jest dostępna dla robota pod adresem http://visualise.ca/anne-au-cherry, ale jeśli odwiedzający korzystający z przeglądarki ją odwiedzi, zostanie przekierowany na http://visualise.ca/#! / anne-au-cherry (odbywa się to za pomocą javascript).

Aby zapewnić robotowi potrzebne ?_escaped_fragment_=, skorzystałem z hacka WordPress, który znalazłem w sieci: http://www.wordpress-fr.net/support/sujet-54810-add-action-parse-request, a teraz GoogleBot może zobaczyć zawartość moich stron obsługiwanych przez AJAX. Myślałem, że wszystko zostało zrobione.

Ale kiedy wklejam link do posta na Facebooku (tj.), Nie jest w stanie odczytać zawartości strony, więc zgadywałem, że moja witryna tak naprawdę nie przestrzega schematu opisanego w dokumentacji Google, ponieważ Facebook go obsługuje (jeśli wkleisz http : //twitter.com/#! / gablabelle to zadziała). Ponieważ korzystam z wtyczki jQuery.address, aby pobrać swój hashbang (#!), Poszedłem na ich stronę internetową i pobrałem ich przykładowe pliki, aby zobaczyć, jakie były różnice między ich plikami a moimi i zdałem sobie sprawę, że prawdopodobnie używają funkcji php aby utworzyć potrzebne migawki HTML: https://github.com/bartaz/jquery-address/blob/master/samples/crawling/index.php, ponieważ chyba dlatego Facebook nie może czytać moich.

<?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');
    }

?>

Domyślam się, że mógłbym użyć podobnej funkcji php do obsługi migawek HTML zamiast korzystania z hackowania WordPress, ale musiałbym dostosować ją do WordPress. Problem polega na tym, że nie jestem programistą i do tej pory zrobiłem, co mogłem.

Mój post jest w tym formacie: http://visualise.ca/#!/anne-au-cherry, a wersja statyczna jest dostępna pod adresem http://visualise.ca/anne-au-cherry (Where anne-au-cherry jest postem i zmienia się w zależności od oglądanej strony).

Więc moje pytanie brzmi: czy ktoś może potwierdzić, że jestem na właściwej ścieżce i jeśli to możliwe, również pomóc w tworzeniu tej funkcji php?

Wielkie dzięki za poświęcony czas i pomoc!

Gadanina
źródło
5
Czy myślałeś o wygenerowaniu mapy witryny? Na przykład Yoast WordPress SEO automatycznie generuje mapę witryny dla twoich treści i przesyła je do Bing, Google i Yahoo ...
+1 do pomysłu na mapę witryny. Nadal jestem jednak zdezorientowany co do adresu URL, który jest przekazywany w celu wyświetlenia witryny Google. Czy możesz wkleić adres URL, który zawiera zarówno a) treść strony, jak i b) działa bez JavaScript? Jeśli to nie istnieje, Google ani Facebook nie mają nic do zaindeksowania.
brandwaffle,

Odpowiedzi:

4

W szczególności UNIKAJ używania „hashbang” („! #”), Aby umożliwić indeksowanie stron WordPress opartych na AJAX.

Naprawdę nie chcesz używać metody „hashbang” na stronie WordPress.

„! #” Bardziej przypomina zhackowaną łatkę dla stron, które nie mogą dostarczyć statycznego analogu do swojej wersji AJAX. Google ogólnie nie zaleca jego używania, chyba że nie ma innej alternatywy.

Nie ma żadnych korzyści do wdrożenia systemu hashbang w WordPressie. Frontowe rozwiązanie AJAX dla WordPress powinno działać wokół istniejącego schematu URL (bez skrótu, bez huku).

Podsumowanie: WordPress jest oczywiście indeksowalny; po prostu nie psuj go używając haszyszów.

WraithKenny
źródło
1

Jeśli konkretnie odnosisz się do Facebooka, który nie wyświetla poprawnie metadanych na swojej stronie, powinieneś zajrzeć do wtyczki OpenGraph dla WordPress, ponieważ doda ona odpowiednie metadane og: atrybut. http://wordpress.org/extend/plugins/opengraph/

Możesz także dodać taki link w nagłówku

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

I zobacz, czy to coś robi.

Muszę jednak zapytać, dlaczego to robisz? Twitter znalazł się pod poważnym ostrzałem dla tej struktury adresów URL właśnie dlatego, że indeksowanie jest uciążliwe. Nie mówię, że nie powinieneś tego robić, ale dość ciekawi, jaki jest tego powód :)

brandwaffle
źródło
1

To, co właściwie zrobiłem, to nie używać hashbangów, jak sugerował WraithKenny.

Korzystanie z wtyczki adresu jQuery z metodą $ .address.state (wartość) w celu ustawienia podstawowej ścieżki strony internetowej wykorzystywanej do zarządzania stanem HTML5 oraz metody $ .address.value (wartość) w celu ustawienia bieżącej głębokie linkowanie wartości Byłem w stanie zrobić to, o czym marzyłem.

http://visualise.ca/

Wpisy (kliknij miniaturę obrazu) są ładowane za pośrednictwem AJAX, a adres URL zmienia się w tym samym czasie, posty istnieją same, używając oczywiście tej samej struktury permalink, dzięki czemu jest w pełni indeksowalne.

Jedyny problem będzie dotyczył starszych przeglądarek, które moim zdaniem (wymagają weryfikacji) nadal będą widzieć hashbangi.

Ponieważ nie jestem programistą, dużo czasu zajęło mi zrozumienie. : - / Ale teraz jestem całkiem zadowolony z wyników ;-)

Adres jQuery: http://www.asual.com/jquery/address/

Gadanina
źródło
1
Spójrz na wtyczkę pjax jQuery. github.com/defunkt/jquery-pjax Jest bardzo podobny, ale zajmie się wczytaniem zawartości dla Ciebie itp. Oto przykład tego, co zrobiłem z motywem Twenty Eleven Child github.com/chrisguitarguy/pjaxy
chrisguitarguy