AJAX: Časté dotazy

V tomto článku naleznete odpovědi na časté dotazy ohledně procházení obsahu AJAX.
Kdy je v adresách URL požadavků AJAX nutné použít token #!, a kdy syntaxi _escaped_fragment_?

Ve všech adresách URL, které využívají schéma procházení obsahu AJAX, je na webu potřeba použít syntaxi #!. Hypertextové odkazy ve formátu _escaped_fragment_ Googlebot procházet nebude.

Kde mohu vidět toto schéma v akci?

Ukázkovou aplikaci AJAX naleznete na adrese http://gwt.google.com/samples/Showcase/Showcase.html. Pokud kliknete na některý z odkazů vlevo, bude adresa obsahovat hash fragment #! a aplikace přejde do stavu, který odpovídá danému hash fragmentu. Pokud token #! (například http://gwt.google.com/samples/Showcase/Showcase.html#!CwRadioButton) změníte na ?_escaped_fragment_= (například http://gwt.google.com/samples/Showcase/Showcase.html?_escaped_fragment_=CwRadioButton), vrátí web snímek stránky ve formátu HTML.

Co se stane, pokud se rozhodnu token #! na stránkách AJAX neimplementovat?

Je možné, že se vaše stránky v nejbližší době na stránkách s výsledky vyhledávání Google nebudou zobrazovat správně. Neustále se však snažíme Googlebota vylepšovat, aby se choval více jako prohlížeč. Jakmile implementujeme funkce, které váš web vyžaduje, začne Googlebot vaše stránky indexovat i bez vaší pomoci. Toto schéma procházení obsahu AJAX však poskytuje řešení pro weby, které již AJAX používají a chtějí zajistit správné indexování obsahu již nyní. Předpokládáme, že toto řešení bude vhodné pro uživatele, kteří již snímky svých stránek ve formátu HTML mají nebo je budou generovat pomocí bezobslužného prohlížeče.

Jak často je nutné obsah aktualizovat?

Odpověď na tuto otázku závisí pouze na tom, jak často se obsah aplikace mění. Pokud se mění často, měli byste v odpovědi na požadavek prohledávače poskytnout vždy nový snímek stránky ve formátu HTML. Jako opačný příklad si můžete představit archiv knihovny, jejíž inventář se pravidelně nemění. Pokud nechcete, aby server musel znovu a znovu vytvářet stejné snímky stránek HTML, můžete vytvořit všechny relevantní snímky stránek HTML najednou (třeba i offline) a uložit je pro budoucí využití. Také Googlebotu můžete odpovědět stavovým kódem HTTP 304 (Nezměněno).

Co když má aplikace hash fragmenty nepoužívá?

Možná by měla. Pomocí hash fragmentů můžete aplikaci výrazně zrychlit. Hash fragmenty totiž zpracovává prohlížeč na straně klienta a není tak potřeba obnovovat celou stránku. Kromě toho umožní, aby v aplikaci fungovala historie (nechvalně známé tlačítko Zpět v prohlížeči). Hash fragmenty jsou podporovány v různých architekturách AJAX. Navštivte například článek Really Simple History, seznamte se s pluginem historie v knihovně jQuery a mechanismem historie sady Google Web Toolkit nebo si prostudujte informace o tom, jak správu historie podporuje technologie ASP.NET AJAX.

Pokud však strukturu aplikace hash fragmentům přizpůsobit nelze, můžete ve svých hash fragmentech (vše co v adrese URL následuje za znakem #) použít speciální token. Hash fragment, který vyjadřuje jedinečné stavy stránek, musí začínat vykřičníkem. Pokud například aplikace AJAX obsahuje adresu URL podobnou této:

www.example.com/ajax.html#mystate

měla by nyní vypadat takto:

www.example.com/ajax.html#!mystate

Jakmile začnou stránky využívat toto schéma, budou považovány za stránky, na kterých „lze procházet obsah AJAX“. Pokud tedy stránky poskytnou snímky stránek HTML, bude prohledávač moci zobrazit obsah aplikace.

Povede tento přístup k rozšíření „ošklivých“ adres URL se syntaxí _escaped_fragment_?

Při použití syntaxe _escaped_fragment_ pro adresy URL vznikne dočasná adresa URL, která by neměla být zobrazena koncovému uživateli. Ve všech kontextech, které uvidí uživatel, je potřeba namísto syntaxe _escaped_fragment_ použít „hezkou“ adresu URL s tokenem #! – pro běžnou interakci s aplikací, soubory Sitemap, hypertextové odkazy, přesměrování a všechny další situace, kde by adresu mohl vidět uživatel. Ze stejného důvodu se „hezká“ adresa URL zobrazuje i ve výsledcích vyhledávání.

Neposkytuje toto schéma příležitost k maskování?

Maskování je zobrazování jiného obsahu uživatelům a jiného vyhledávačům. Obvykle se používá s cílem zvýšit hodnocení stránek ve výsledcích vyhledávání. Maskování pro vyhledávače vždy bylo (a bude) závažným problémem. Chtěli bychom zdůraznit, že zavedením procházení aplikací AJAX v žádném případě nechceme maskování otevřít dveře. Obsah snímku stránky ve formátu HTML proto musí být stejný jako obsah, který se zobrazí koncovému uživateli v prohlížeči. Pokud tomu tak není, lze to považovat za maskování. Další podrobnosti naleznete v této odpovědi.

Mohu pomocí tohoto schématu zlepšit procházení svých souborů Flash nebo jiných multimediálních souborů?

Google indexuje mnoho typů multimediálních souborů a technologii indexování a procházení neustále vylepšujeme. Googlebot však nemusí vidět veškerý obsah aplikace Flash nebo jiné multimediální aplikace (podobně jako nemůže procházet veškerý dynamický obsah na webu). Proto může být užitečné poskytnout Googlebotu další obsah pomocí tohoto schématu. Opět platí, že obsah snímku stránky ve formátu HTML musí být stejný jako obsah, který se zobrazí koncovému uživateli v prohlížeči. Google si vyhrazuje právo vyřadit ze svého indexu weby, které podle nás používají maskování.

Jak postupovat v případě, že některé adresy URL s hash fragmentem na webu nemají být procházeny?

Pokud na webu uplatníte schéma procházení obsahu AJAX, Google bude procházet všechny adresy URL s hash fragmentem, na které narazí. Pokud máte adresy URL s hash fragmentem, které bychom procházet neměly, doporučujeme vám přidat do souboru robots.txt direktivu s regulárním výrazem. V hash fragmentech adres, které nemáme procházet, můžete použít například nějakou jednotnou konvenci a poté pomocí souboru robots.txt všechny odpovídající adresy URL vyloučit. Předpokládejme, že všechny stavy, které nechcete indexovat, mají hash fragment ve formátu #DONOTCRAWLmyhash fragment. V procházení těchto stránek můžete Googlebotu zabránit tím, že do souboru robots.txt přidáte následující direktivu:

Disallow: /*_escaped_fragment_=DONOTCRAWL
Jak postupovat v případě stávajících použití tokenu #! v hash fragmentech?

#! je token, který se v existujících hash fragmentech moc často nepoužívá. Specifikace adres URL jej však nezakazuje. Co dělat, pokud vaše aplikace používá token #!, ale nové schéma procházení obsahu AJAX používat nechcete? Jedním ze způsobů, které můžete zvolit, je přidat do souboru robots.txt direktivu, kterou o této skutečnosti prohledávač informujete.

Disallow: /*_escaped_fragment_

Pokud aplikace obsahuje pouze tuto adresu URL: www.example.com/index.html#!mystate, znamená to, že tato adresa URL nebude procházena. Pokud aplikace obsahuje také holou adresu URL www.example.com/ajax.html, tato adresa URL procházena bude.

Jak je to s usnadněním přístupu?

Vedlejším efektem poskytování statického obsahu vyhledávačům je to, že webmasteři lépe zpřístupní aplikace handicapovaným uživatelům. Tato nová dohoda posouvá usnadnění přístupu na novou úroveň. Webmasteři mohou pomocí bezobslužného prohlížeče vytvářet snímky stránek ve formátu HTML, které obsahují veškeré relevantní informace a lze je číst pomocí nástrojů na čtení obrazovky. To znamená, že je udržování aktuálního statického obsahu snazší a vyžaduje méně ruční práce. Jinými slovy, webmasteři mají o důvod navíc, proč své aplikace zpřístupnit handicapovaným.

Jak mám použít atribut rel="canonical"?

Použijte verzi <link rel="canonical" href="http://example.com/ajax.html#!foo=123" /> (nikoli verzi <link rel="canonical" href="http://example.com/ajax.html?_escaped_fragment_=foo=123" />.

Kterou adresu URL mám zahrnout do souboru Sitemap?

Soubor Sitemap by měl obsahovat verzi, kterou chcete zobrazit ve výsledcích vyhledávání, tedy verzi http://example.com/ajax.html#!foo=123.

Jaký vliv budou mít adresy URL s tokenem #! na zdroje produktů?

Je obvyklé, že weby chtějí používat stejné adresy URL pro Nákupy i Vyhledávání. Verze adresy s tokenem #! by obecně měla být považována za kanonickou, kterou je třeba použít ve všech kontextech. Adresa se syntaxí _escaped_fragment_ je považována za dočasnou adresu, kterou by koncový uživatel nikdy neměl vidět.

Používám bezobslužný prohlížeč HtmlUnit a nefunguje to. Proč?

Pokud HtmlUnit nevrací předpokládaný snímek, pravděpodobně je to tím, že mu neposkytujete dostatek času ke spuštění JavaScriptu nebo k provedení požadavků XHR. Chcete-li problém odstranit, vyzkoušejte některé nebo všechny následující možnosti:

  • Použijte funkci NicelyResynchronizingAJAXController. Prohlížeč HtmlUnit pak bude čekat na všechna nezpracovaná volání XHR.
  • Zvyšte časový limit čekání ve funkcích waitForBackgroundJavaScript nebo waitForBackgroundJavaScriptStartingBefore.
Tímto způsobem problém s největší pravděpodobností odstraníte. Pokud ne, můžete také navštívit stránku s častými dotazy ohledně prohlížeče HtmlUnit na adrese http://htmlunit.sourceforge.net/faq.html. Prohlížeč HtmlUnit má také uživatelské fórum.

 

Pomohly vám tyto informace?
Jak bychom článek mohli vylepšit?