Użyj PushState i Prekompozycji
Obecnym (2015) sposobem jest skorzystanie z metody pushState JavaScript.
PushState zmienia adres URL na górnym pasku przeglądarki bez ponownego ładowania strony. Załóżmy, że masz stronę z kartami. Zakładki ukrywają i pokazują zawartość, a zawartość jest wstawiana dynamicznie, albo za pomocą AJAX, albo po prostu ustawiając display: none i display: block, aby ukryć i pokazać prawidłową zawartość karty.
Po kliknięciu kart użyj pushState, aby zaktualizować adres URL na pasku adresu. Gdy strona jest renderowana, użyj wartości na pasku adresu, aby określić, która karta ma zostać wyświetlona. Routing kątowy zrobi to za Ciebie automatycznie.
Prekompozycja
Istnieją dwa sposoby na uruchomienie aplikacji pojedynczej strony PushState (SPA)
- Poprzez PushState, gdzie użytkownik klika link PushState, a zawartość jest AJAXed.
- Naciskając bezpośrednio adres URL.
Pierwsze trafienie w witrynie będzie wymagało bezpośredniego trafienia w adres URL. Kolejne działania będą po prostu AJAX w treści, gdy PushState aktualizuje adres URL.
Roboty zbierają linki ze strony, a następnie dodają je do kolejki w celu późniejszego przetworzenia. Oznacza to, że dla przeszukiwacza każde trafienie na serwerze jest trafieniem bezpośrednim, nie nawigują one za pośrednictwem Pushstate.
Prekompozycja łączy początkowy ładunek w pierwszą odpowiedź z serwera, być może jako obiekt JSON. Dzięki temu wyszukiwarka może renderować stronę bez wykonywania wywołania AJAX.
Istnieją dowody sugerujące, że Google może nie wykonywać żądań AJAX. Więcej na ten temat tutaj:
https://web.archive.org/web/20160318211223/http://www.analog-ni.co/precomposing-a-spa-may-become-the-holy-grail-to-seo
Wyszukiwarki mogą czytać i uruchamiać JavaScript
Google już od jakiegoś czasu może analizować JavaScript, dlatego pierwotnie opracowali Chrome, aby działał jako w pełni funkcjonalna przeglądarka bezgłowa dla pająka Google. Jeśli link ma prawidłowy atrybut href, nowy adres URL można zindeksować. Nic więcej nie można zrobić.
Jeśli dodatkowo kliknięcie łącza spowoduje wywołanie pushState, użytkownik może nawigować po stronie za pośrednictwem PushState.
Obsługa wyszukiwarek dla adresów URL PushState
PushState jest obecnie obsługiwany przez Google i Bing.
Google
Oto Matt Cutts odpowiadający na pytanie Paula Irisha dotyczące PushState dla SEO:
http://youtu.be/yiAF9VdvRPw
Oto Google ogłasza pełną obsługę JavaScript dla pająka:
http://googlewebmastercentral.blogspot.de/2014/05/understanding-web-pages-better.html
Rezultatem jest to, że Google obsługuje PushState i będzie indeksować adresy URL PushState.
Zobacz także pobieranie narzędzi Google dla webmasterów jako Googlebota. Zobaczysz, że JavaScript (w tym Angular) jest wykonywany.
Bing
Oto ogłoszenie Bing dotyczące obsługi ładnych adresów URL PushState z marca 2013 r .:
http://blogs.bing.com/webmaster/2013/03/21/search-engine-optimization-best-practices-for-ajax-urls/
Nie używaj HashBangs #!
Adresy URL Hashbang były brzydką stopą wymagającą od dewelopera dostarczenia wstępnie renderowanej wersji witryny w specjalnej lokalizacji. Nadal działają, ale nie musisz ich używać.
Adresy URL Hashbang wyglądają tak:
domain.com/#!path/to/resource
Zostałoby to sparowane z takim metatagiem:
<meta name="fragment" content="!">
Google nie zaindeksuje ich w tym formularzu, ale zamiast tego pobierze statyczną wersję witryny z adresu URL _escaped_fragments_ i zaindeksuje ją.
Adresy URL typu pushstate wyglądają jak każdy zwykły adres URL:
domain.com/path/to/resource
Różnica polega na tym, że Angular obsługuje je za Ciebie, przechwytując zmianę w document.location zajmując się tym w JavaScript.
Jeśli chcesz używać adresów URL PushState (i prawdopodobnie tak robisz), usuń wszystkie stare adresy URL i metatagi w stylu skrótu i po prostu włącz tryb HTML5 w swoim bloku konfiguracji.
Testowanie witryny
Narzędzia Google dla webmasterów zawierają teraz narzędzie, które pozwala pobrać adres URL jako google i renderować JavaScript podczas renderowania go przez Google.
https://www.google.com/webmasters/tools/googlebot-fetch
Generowanie adresów URL PushState w Angular
Aby generować prawdziwe adresy URL w Angular, zamiast # z prefiksem, ustaw tryb HTML5 na obiekcie $ locationProvider.
$locationProvider.html5Mode(true);
Po stronie serwera
Ponieważ używasz prawdziwych adresów URL, musisz upewnić się, że ten sam szablon (plus niektóre wstępnie skomponowane treści) zostanie dostarczony przez serwer dla wszystkich prawidłowych adresów URL. To, jak to zrobisz, będzie się różnić w zależności od architektury serwera.
Mapa strony
Twoja aplikacja może korzystać z nietypowych form nawigacji, na przykład najeżdżania myszą lub przewijania. Aby mieć pewność, że Google będzie w stanie prowadzić Twoją aplikację, prawdopodobnie sugeruję utworzenie mapy witryny, prostej listy wszystkich adresów URL, na które odpowiada twoja aplikacja. Możesz umieścić to w domyślnej lokalizacji (/ sitemap lub /sitemap.xml) lub poinformować o tym Google za pomocą narzędzi dla webmasterów.
W każdym razie dobrze jest mieć mapę witryny.
Obsługa przeglądarki
Pushstate działa w IE10. W starszych przeglądarkach Angular automatycznie powróci do adresów URL w stylu mieszania
Strona demonstracyjna
Następująca treść jest renderowana przy użyciu adresu URL typu pushstate ze wstępnym składem:
http://html5.gingerhost.com/london
Jak można zweryfikować, pod tym linkiem treść jest indeksowana i pojawia się w Google.
Podawanie kodów statusu nagłówka 404 i 301
Ponieważ wyszukiwarka zawsze trafi na Twój serwer dla każdego żądania, możesz podawać kody statusu nagłówków z serwera i oczekiwać, że Google je zobaczy.