Treść strony ładowana dynamicznie ajaxem, a SEO

0

Witam. Na stronie mam ok. 99% treści ładowana dynamicznie ajaxem w zależności od "ruchów" odwiedzającego. Jak mogę rozwiązać problem pozycjonowania w wyszukiwarkach i ogólnie optymalizacji SEO? Standardowy kod strony nie zawiera praktycznie nic oprócz loga i stopki... Czy jeżeli zamieszczę gdzieś w stopce linki typu <a href="#xxx">xxx</a> to crawlery to "zjedzą"? Dodam, że javascriptem obsługuję linki z hashami i w takim wypadku generuje stronę (no ale wciąż ajaxem).

3

Dość ciężka sprawa, ale do rozwiązania.

Do niedawna musiałbyś mieć na stronie prawdziwe linki, np. <a href="foo.php">xxx</a>. Kod JS przetwarzałby DOM i pobierał URL-e z takiego linku. Po kliknięciu, wysyłałby żądanie do foo.php. Skrypt foo.php zwracałby zawartość, którą JavaScript wsadzałby w dane miejsce strony. Skrypt foo.php mógłby też zostać wywołany przez crawler. Ba: crawler mógłby otrzymać pełny dokument HTML wraz z sekcją <head>, <body> itp., a Ajax mógłby doklejać do URL-a parametr, np. postaci foo.php?ajax=true i wtedy odpowiedzi na żądania ajaxowe mogłyby być pozbawione tych sekcji <head> -- składałyby się wyłącznie z tego fragmentu kodu HTML, który JavaScript wsadzałby w określony obszar dokumentu. Oczywiście, JavaScript mógłby też zmienić w locie URL linku z foo.php na #foo, by po kliknięciu w link zmienić URL bieżącej strony na potrzeby historii. Cała ta operacja w ogóle nie dotyczyłaby crawlerów, które po prostu podążałyby za zwykłymi linkami.

Podobną technikę, zwaną Hijax, Jeremy Keith opisał w książce "Kuloodporny Ajax".

Ale od stosunkowo niedawna działa inne rozwiązanie -- specjalny "protokół" dla stron ajaxowych:
http://www.seomoz.org/blog/how-to-allow-google-to-crawl-ajax-content

0

Czytałem o tym #!. Sprawa ma się tak, że strona jest dość "nietypowa" i ajax nie ładuje strony po kliknięciu linka a po innych czynnościach. Oznacza to w praktyce, że na stronie w kodzie nie ma linków. Spróbuję zrobić najważniejsze linki przy pomocy tego ! w stopce i mam nadzieję że to będzie wystarczyć.

A może lepszym sposobem będzie umieszczenie najważniejszych informacji w znacznikach <noscript>?

0

@kamdz:
Sporo zależy od tego, co konkretnie masz na tej stronie.

Rozumiem, że mimo wszystko po wykonaniu pewnych akcji pokazuje się użytkownikowi jakaś treść. W takim wypadku nie musi mieć znaczenia fakt, że te "akcje" to nie kliknięcia.

Mógłbyś np. mieć stronę jakiejś firmy kurierskiej. Załóżmy, że designer miał trochę poroniony pomysł i chciał, żeby strona była cool.

U góry strony jest stosik kopert, na dole kilka skrzynek, zatytułowanych "Aktualności", "O firmie", "Kontakt" itp. Żeby wyświetlić informacje kontaktowe, trzeba wziąć kopertę ze stosiku i -- metodą przeciągnij-i-upuść -- wrzucić ją do skrzynki "Kontakt".

Nieważne, że nie ma tu teoretycznie klikania w linki. Te skrzynki, od strony kodu mogłyby być zwykłymi linkami (do strony kontaktowej, aktualności itp.). Skrypty JS wyłączałyby te linki (evt.preventDefault()) i robiły z nich cele dla drag'n'drop. Crawlery natomiast widziałyby zwykłe linki.

IMO posiadanie alternatywnej zawartości dla crawlerów to ostateczność. Dwie wersje praktycznie tej samej zawartości trudno otrzymać. W opisanym wyżej przykładzie strony ze skrzynkami i drag'n'drop nie ma tego problemu: JavaScript pobiera URL-e z linków, w samych linkach są też ikony przedstawiające skrzynki, więc tak naprawdę jest jedna zawartość, tyle że jest ona modyfikowana przez JS.

Jak się nie da inaczej, można zastosować te linki w stopce. Co do noscripta to nie mam pewności na ile byłby on dobry, sam tego od dawna nie używam.

Wiesz, jeśli treści ładowanej Ajaxem nie jest tak dużo, to możesz rozważyć zrezygnowanie z Ajaxa i wrzucenie treści w kod normalnej strony. Skrypty by ukrywały całą treść oprócz tej, która w danej chwili ma być pokazana użytkownikowi.

0

Chyba skorzystam z rozwiązania pod google tzn. #!. Główna "nawigacja" to u mnie formularz więc nie ma na to rozwiązania. Dlatego wrzucę w stopkę ważniejsze linki z #! bo inaczej się google o treści w żaden sposób nie dowie. Dorobię po stronie serwera tylko żeby przy gecie ?escaped_fragment= renderowało całą stronę z konkretną treścią a przy np. ?escaped_fragment=...&ajax=true generowało tylko konkretny fragment to będzie najlepsze rozwiązanie. Mam tylko nadzieję że mi ze strony głównej pajączek pójdzie dalej wgłąb po linkach ze stopki... Dla pewności jeszcze dodam sitemap.xml, a właśnie umieścić w nim linki "ładne z #!" czy te brzydsze?

1 użytkowników online, w tym zalogowanych: 0, gości: 1