Використовуйте PushState і Precomposition
Поточний (2015) спосіб зробити це за допомогою методу JavaScript pushState.
PushState змінює URL-адресу у верхній панелі браузера, не завантажуючи сторінку. Скажімо, у вас є сторінка, що містить вкладки. Вкладки приховують і показують вміст, і вміст вставляється динамічно, або за допомогою AJAX, або просто встановлення дисплея: немає і дисплей: блокувати, щоб сховати та показати правильний вміст вкладки.
Коли клацніть вкладки, використовуйте pushState для оновлення URL-адреси в адресному рядку. Коли сторінка відображається, використовуйте значення в адресному рядку, щоб визначити, яку вкладку відображати. Кутова маршрутизація зробить це автоматично для вас.
Попередній склад
Є два способи потрапити на додаток PushState Single Page (SPA)
- Через PushState, де користувач натискає посилання PushState, а вміст AJAXed в.
- Натискаючи URL безпосередньо.
Початкове звернення на сайт передбачає пряме звернення до URL-адреси. Подальші звернення просто AJAX у змісті, як PushState оновить URL-адресу.
Сканери збирають посилання зі сторінки, а потім додають їх у чергу для подальшої обробки. Це означає, що для сканера кожне звернення на сервер є прямим зверненням, вони не переходять через Pushstate.
Попередня композиція зв'язує початкове корисне навантаження в першу відповідь з сервера, можливо, як об'єкт JSON. Це дозволяє пошуковій системі відображати сторінку без виконання виклику AJAX.
Існують певні докази того, що Google може не виконувати запити AJAX. Більше про це тут:
https://web.archive.org/web/20160318211223/http://www.analog-ni.co/precomposition-a-spa-may-become-the-holy-grail-to-seo
Пошукові системи можуть читати та виконувати JavaScript
Google вже певний час може розбирати JavaScript, саме тому вони спочатку розробили Chrome, щоб діяти як повнофункціональний безголовий браузер для павука Google. Якщо посилання має дійсний атрибут href, нову URL-адресу можна проіндексувати. Більше нічого робити.
Якщо натискання посилання додатково викликає виклик pushState, користувач може переміщатися по сайту через PushState.
Підтримка пошукової системи для URL-адрес PushState
На даний момент PushState підтримує Google та Bing.
Google
Ось Метт Куттс, відповідаючи на запитання Пола Ірландського про PushState для SEO:
http://youtu.be/yiAF9VdvRPw
Ось Google оголошує повну підтримку JavaScript для павука:
http://googlewebmastercentral.blogspot.de/2014/05/understanding-web-pages-better.html
Підсумок полягає в тому, що Google підтримує PushState і індексує URL PushState.
Дивіться також отримання інструментів веб-майстрів Google як Googlebot. Ви побачите, що ваш JavaScript (включаючи кутовий) виконується.
Бінг
Ось повідомлення Bing про підтримку гарних URL-адрес PushState від березня 2013 року:
http://blogs.bing.com/webmaster/2013/03/21/search-engine-optimization-best-practices-for-ajax-urls/
Не використовуйте HashBangs #!
URL-адреси Hashbang були некрасивими зупинками, які вимагають від розробника надати попередньо надану версію сайту в спеціальному місці. Вони все ще працюють, але вам не потрібно їх використовувати.
URL-адреси Hashbang виглядають так:
domain.com/#!path/to/resource
Це буде в поєднанні з таким метатегом:
<meta name="fragment" content="!">
Google не буде індексувати їх у цій формі, а натомість витягне статичну версію сайту з URL-адреси _escaped_fragments_ та індексує це.
URL-адреси Pushstate мають вигляд будь-якої звичайної URL-адреси:
domain.com/path/to/resource
Різниця полягає в тому, що Angular обробляє їх за вас, перехоплюючи зміни в document.location, що займаються цим в JavaScript.
Якщо ви хочете використовувати URL-адреси PushState (а ви, мабуть, і так), вийміть всі старі URL-адреси та метатеги стилю хешу та просто увімкніть режим HTML5 у своєму конфігураційному блоці.
Тестування вашого сайту
Тепер інструменти для веб-майстрів Google містять інструмент, який дозволить вам отримати URL-адресу як google та відтворити JavaScript у міру надання Google.
https://www.google.com/webmasters/tools/googlebot-fetch
Генерування PushState URL-адрес у кутовій формі
Щоб генерувати реальні URL-адреси в кутових, а не # префіксованих, встановіть режим HTML5 у вашому об’єкті $ locationProvider.
$locationProvider.html5Mode(true);
Сторона сервера
Оскільки ви використовуєте реальні URL-адреси, вам потрібно буде забезпечити, щоб той самий шаблон (плюс деякий попередньо створений вміст) надсилався вашим сервером для всіх дійсних URL-адрес. Як це зробити, буде залежати від архітектури вашого сервера.
Карта сайту
Ваш додаток може використовувати незвичайні форми навігації, наприклад, наведення курсора чи прокрутки. Щоб Google міг керувати вашим додатком, я, мабуть, запропонував би створити мапу сайту, простий список усіх URL-адрес, на які відповідає ваш додаток. Ви можете розмістити це за замовчуванням (/ sitemap або /sitemap.xml) або повідомити Google про це за допомогою інструментів веб-майстрів.
Це все-таки добре мати мапу сайту.
Підтримка браузера
Pushstate працює в IE10. У старих браузерах Angular автоматично повернеться до URL-адрес стилів хешу
Демонстраційна сторінка
Наступний вміст виводиться за допомогою URL-адреси push з попередньою композицією:
http://html5.gingerhost.com/london
Як можна переконатися, за цим посиланням вміст індексується та з’являється в Google.
Обслуговування кодів 404 та 301 заголовків
Оскільки пошукова система завжди звертається до вашого сервера для кожного запиту, ви можете подавати коди статусу заголовка з вашого сервера і очікувати, що Google їх побачить.