Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Ajax & Google] Prawidłowe pozycjonowanie wraz z dynamiczną stroną
Forum PHP.pl > Forum > XML, AJAX > AJAX
Sztef89
Witam,

Jestem w trakcie realizacji jednego portalu, ten jednak ze względu na zasobożerność chciałbym wykonać głównie opierając się na Ajaxie.

Mój pomysł jest taki:

zawartość strony <div id="zaw"></div> będzie dynamiczna i do tego diva będą ładowane dane.
Każdy wpis wraz z ze swoimi danymi (obrazki, tekst, przyciski) będzie ładowany dynamicznie do tego diva.

Przy takim rozwiązaniu pojawia się kilka problemów:
1. Użytkownik nie może podzielić się linkiem do tego wpisu (adres w przeglądarce cały czas jest taki sam)
2. Google nie zindeksuje takiego wpisu bo nie obsługuje JS.

Aby pozbyć powyższych problemów wpadłem na taki pomysł:
Do każdego wpisu będzie generowany link i będzie można go skopiować. Po wejściu pod link odpowiednia funkcja wygeneruje odpowiednie metatagi, tytuł strony, zawartość strony itp.

I teraz mam takie pytanie: Czy takie rozwiązanie zapewni poprawne indeksowanie danego wpisu ? Bo jak widzicie Google bot sam nie zdobędzie linków do wszystkich wpisów (zwykłe strony html google bot odwiedza na zasadzie "drzewa") aby je zindeksować, trzeba mu w tym pomóc... tylko jak ?
konole
Od razu przy przejściu twórz linki w sposób www.domena.pl/#/534-tytul-artykulu

Poszukaj w Google pod "hash links"
Sztef89
Cytat(konole @ 26.08.2011, 23:08:48 ) *
Od razu przy przejściu twórz linki w sposób www.domena.pl/#/534-tytul-artykulu

Poszukaj w Google pod "hash links"


Ok, napisałeś jak mam tworzyć linki do każdego wpisu ale moje pytanie brzmiało trochę inaczej smile.gif

Na razie myślę nad takim rozwiązaniem:
1. Użytkownik klika na link np na głównej stronie
2. Zawartość czyli ten środkowy div zostaje wyczyszczony i na jego miejsce wgra się kod html do wpisu który kliknął
3. Wpis będzie zawierał przycisk lub pole z wygenerowanym linkiem.
4. Użytkownik otwiera wpis z linku (index.php?wpis=32849) skrypt odczytuje z bazy tytuł strony, metatagi itp. - czyli normalne wczytanie strony.

Ad2. Podczas wczytywania wpisu takie rzeczy jak: tytuł strony, link, metatagi itp nie zmieniają się.

Czy takie rozwiązanie będzie najbardziej efektywne ? Rozumiem, że te hash links służą do tego co napisałem w punkcie nr 4 ?
Nie mam żadnego doświadczenia w tym temacie (ajax & pozycjonowanie go). W sumie projekt jest mocno związany z moją praca inżynierską i bardzo zależy mi na rozwiązaniu tego problemu. Zresztą na pewno to przyda się przyszłym pokoleniom smile.gif

Z góry dziękuję za pomoc.
konole
Hash linki mógłbyś traktować jako normalne linki.

1. Użytkownik klika na link np na głównej stronie, zmienia się adres z index.php na index.php/#wpis-32849 bez przeładowania
2. Zawartość czyli ten środkowy div zostaje wyczyszczony i na jego miejsce wgra się kod html do wpisu który kliknął dzięki działaniu JavaScript (AJAX)
3. Ten punkt nie jest już potrzebny, link został wygenerowany wcześniej.
4. Użytkownik otwiera wpis z linku (index.php/#wpis=32849) skrypt odczytuje z bazy tytuł strony, metatagi itp. - czyli normalne wczytanie strony.
Sztef89
Wreszcie zrozumiałem o co chodzi, chodzi o coś takiego: http://swashata.50webs.com/sample.htm biggrin.gif (to w sumie istniało od początku HTMLa oneeyedsmiley02.png )
Tylko teraz pojawia się problem, jestem początkujący w jQuery i nie wiem jak użyć tych haszy aby zmieniały mi diva... a nie przesuwały stronę jak w powyższym linku... masz może jakiś przykład ? cokolwiek ?


Dzięki za pomoc ! nerdsmiley.png

//EDIT//
Przeszukując google dowiedziałem się, że to się nie nazywa hash link smile.gif więcej wyników wyszukiwania jest poda "anchor link". Jak znajdę to napiszę... a na razie proszę o pomoc smile.gif

//EDIT//
Znalazłem co szukałem ! smile.gif Ciekawi mnie dlaczego te rozwiązanie jest tak mało popularne w polskim Internecie...
Jeszcze pozostaje kwestia SEO tego rozwiązania. Ale dzięki za doprowadzenie mnie do tego rozwiązania ! Bez ciebie nadal bym siedział nad tym problemem wink.gif

Miłej lektury:
http://yensdesign.com/2008/11/creating-aja...hor-navigation/
http://www.softwaredeveloper.com/features/...ay-nice-061907/

PS. Dla ciekawostki dodam, że z tego rozwiązania korzysta Google w swoich produktach, np. w usłudze gmail smile.gif

Pozostaje teraz pytanie:

Jak pozycjonować każdy wpis wyświetlony tym sposobem ?

Bez JS wejście pod link www.example.com/index.php#aaaaa23d kończy się niepoprawnym wczytaniem strony... :/
Rid
No jak link dynamiczny tworzony za pomocą JQ,JS,Ajax to nie ma co się dziwić ,że bez obsługi js(z wyłączoną js) nie działa.
Można obsłużyć wyjątek wyłączonej javy poprzez:
  1.  
  2. header("Location: "http://www.moja_strona_oblugujaca_wyjatek_wylaczanej_javy.com");
  3.  


albo
  1. header("HTTP/1.0 404 Not Found");
  2.  


Oczywiście w noscript można pisać sobie własne funkcje(co dusza zapragnie) ,ja ukazałem taki przykład.
Sztef89
Dzięki za wskazówkę!

Widzę, że nawet dobra porada ale przy takim rozwiązaniu można sobie zrobić problem. Google banuje strony, które mają dwie wersje serwisu. Jest spowodowane tym, że spamerzy specjalnie ukrywają dobrze wypozycjonowaną stronę, a użytkownikowi pokazują spreparowaną... z tego względu google rozdaje takim stronom bany.

I teraz widać, że mamy tylko 3 rozwiązania (jeżeli są inne to napiszcie):
- nie robić strony dynamicznej ale mieć możliwość bezpiecznego pozycjonowania
- zaryzykować i zrobić 2 wersje serwisu z JS i bez JS
- zrobić stronę tylko opartą na JS i pogodzić się z tym, że będzie mało wypozycjonowana

Zalety web 2.0:
- mniejsze obciążenie serwera
- szybsze ładowanie stron
- większa wygoda dla użytkownika
- można by wiele pisać... same zalety!

Czytałem, że Google pracuje nad rozwiązaniem problemu pozycjonowania na stronach web 2.0. Niestety nie wiadomo kiedy wprowadzi poprawki. Web 2.0 to przyszłość, dlatego Google musi coś zrobić w tym temacie. A do tej pory musimy sobie jakoś radzić...

//EDIT//

Wpadłem na pomysł jak rozwiązać ten problem ale niestety pomysł nie wypalił...:

Jeżeli w php dałoby się odczytać np taki link: http://www.example.com/index.php#wpis-13423
to można by zrobić przekierowanie gdy JS jest wyłączone, na przykład w taki sposób jak @up napisał, czyli używając <noscript></noscript>.
Niestety php jest w stanie odczytać cały link bez tego co jest po #, ponieważ ten znacznik wykonuje się po stronie użytkownika/przeglądarki :/

Tylko jak odczytać ten znacznik nie używając JS ?

Czuję że dobrze kombinuje ale nadal jestem daleko od rozwiązania problemu...
ShadowD
hmm, chyba się nie da, nie wiem jak sprawa wygląda z htaccess może on widzi ten ciąg i pozwoli go jakoś przepisać?

Nie wiem gdzie, ale nie dawno czytałem jak się tego sprawy rozwiązuje i rozwiązanie było dosyć czasochłonne, ale działało z googlem i user nie był świadomy, funkcjonowało to właśnie na linkach z #, po nim była ścieżka. Google wedle jakiś opisanych zasad widząc taki link usuwał # i szło dalej na jakiś tam link - dzięki temu wiedziało jak podstrona wyglądała, całość była w 100% legalna i wspierana, były jakieś założenia o braku różnic pomiędzy treścią podstron, najlepiej jak wyglądały identycznie. Nie wiem tylko czy strona końcowa podstawiana dla google nie miała być okrojona do treści modyfikowanej czy właśnie do całości.

Pomysłem poradzenia sobie z takim problemem, była by strona bez js, a do niej dodać kod podmieniający linki na +#, jeśli js-off strona działa bez problemu a z js korzysta z podmienionych linków, i podmienia części strony tak by były identyczne jak i bez, czyli strony wyglądają w 100% tak samo, ale są doczytywane kawałkami. Coś takiego chyba nie było by widziane źle, w końcu wygląda identycznie, a działa podobnie.

Na pewno któryś z userów forum wie gdzie taki art się pokazał, wydaje mi się że to było coś na blogu z planety, ale nie dam sobie głowy uciąć. Temat bardzo ciekawy i może ktoś nas nakieruje dalej, mam nadzieję że pomogłem też trochę!
Sztef89
Czyli co jak zrobię dwie metody wywołania strony i obie metody będą się różnić tym, że jedna generuje metatagi i tytuł strony a druga nie. I takie coś przejdzie w wyszukiwarce Google ? Zakładając, że wygląd samej strony będzie dokładnie taki sam (dla użytkownika jedyna zmiana to tytuł strony).
Niestety nie wiem jak bardzo Google tępi za robienie "podwójnych" stron, spamerem nie jestem i nie będę ale jakbym dostał bana to bym się wkurzył biggrin.gif

Mam drugi pomysł ! A wywodzi się z wypowiedzi @ShadowD smile.gif

JavaScript obsługuje wyrażenia regularne. Prawda ? smile.gif Więc można by zrobić tak:
1. Wyłączone JS
a.) linki generowane są bez haszy czyli np <a href="index.php?wpis-21344">link</a>
b.) po kliknięciu normalnie przeładowuje się strona...

2. Włączone JS
a.) Odpowiednia funkcja JS zamienia linki na linki z haszem czyli w naszym przykładzie z "index.php?wpis-21344" na "#wpis-21344"
b.) Po kliknięciu w link otwiera się dynamicznie smile.gif
- Jak to zrobić ? Banalnie prosto! smile.gif
document.body.innerHTML = document.body.innerHTML.replace(/href="index.php?/, 'href="#');
Poprawka:
document.body.innerHTML = document.body.innerHTML.replace(/href="index.php\?/g, 'href="#');
i to wklejamy w $(document).ready(function() { });


Problem jaki na razie zauważyłem to, że będą dwa linki do tej samej podstrony jeden z haszem drugi z php - ale chyba nie da się tego raczej pogodzić... No i jak jakaś osoba, która ma włączone JS da linka innej z wyłączonym JS to ta druga osoba ujrzy stronę główną zamiast tej właściwej... No ale można wyświetlić alerta tej osobie aby włączyła JS wink.gif

Czuję coś, że to nie do końca dobry pomysł... czekam na to co Wy o tym myślicie smile.gif
ShadowD
Ciekawy link dla następców: http://code.google.com/intl/pl/web/ajaxcra...ng-started.html
Sztef89
Cytat(ShadowD @ 30.08.2011, 22:59:51 ) *


Mylnie twierdziłem, ze Google olewa Web 2.0 wstydnis.gif Po doczytaniu wszystkiego mamy dwa (prawidłowe) sposoby tworzenia dynamicznych stron:
Hijax - czyli robienie dwóch wersji stron, to co napisałem w poprzednim poście w 100% będzie odpowiadać robotom googla,
HTML Snapshot - czyli mechanizm Googla umożliwiający indeksowanie ajaxa. Polecam przeczytać ten poradnik od początku czyli: http://code.google.com/intl/pl/web/ajaxcra...learn-more.html

W sumie to tyle w tym temacie ! Dziękuję za pomoc, a nowym użytkownikom życzę powodzenia ! nerdsmiley.png
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.