HTML-фрагменты для приложения AngularJS, которое использует pushState?

Я решаю, безопасно ли разрабатывать приложение для клиента на AngularJS с использованием pushState.

Я читал, что при использовании pushState в приложении AngularJS нам не нужно беспокоиться оGooglebot потому что теперь он может выполнять достаточно JS для создания фрагмента HTML для себя. Но тогда я задаюсь вопросом оBing, facebook и другие боты и скребки. Обучающие программы, которые я видел, чтобы сделать AngularJS SEO-дружественными, все имеют дело с приложениями, которые используют hashbangs (#!). Это не относится ко мне, так как я не использую hashbangs.

У кого-нибудь есть понимание этой проблемы? Каковы некоторые методы для обеспечения приложения AngularJSкоторый использует pushState являетсяSEO дружественных а такжеСоциально-скребок дружественный? Если вы используете такой сервис, как Seo4Ajax или prerender.io, я буду признателен за ваши мысли об этом.

Замечания: Насколько я понимаю, при разработке одностраничных приложений в последние пару лет было необходимо отправлять фрагменты HTML-кода поисковым роботам. Это было достигнуто с помощью hashbangs и метатега, который позволяет Google, Bing и Facebook знать, что при замене запроса необходимо заменить bang (!) На _escaped_string. На сервере вы перечислили запросы с _escaped_string и доставили соответствующий фрагмент HTML, используя инструмент для создания фрагментов HTML, таких как phantomJS.

Теперь, когда у нас есть pushState, я не вижу, как мы указываем ботам без javascript, какую часть URL переписать с помощью _escaped_string или даже если это необходимо. У меня проблемы с поиском какой-либо информации, кроме "с вашим сайтом все будет в порядке с Google;)".

Вот некоторые другие вопросы SO, которые похожи, но остались без ответа.
Angularjs против SEO против pushState
.htaccess для SEO-ботов, сканирующих одностраничные приложения без хэш-банга

Вот решение, которое я разместил в этом вопросе, и которое я рассматриваю для себя на случай, если я захочу отправить HTML-фрагменты ботам. Это было бы решением дляБэкэнд Symfony2:

Используйте prerender или другой сервис для генерации статических фрагментов всех ваших страниц. Храните их в доступном для вашего маршрутизатора месте.

В вашем файле маршрутизации Symfony2 создайте маршрут, соответствующий вашему SPA. У меня есть тестовый SPA, работающий по адресу localhost.com/ng-test/, поэтому мой маршрут будет выглядеть так:

# Adding a trailing / to this route breaks it. Not sure why.
# This is also not formatting correctly in StackOverflow. This is yaml.
NgTestReroute:
----path: /ng-test/{one}/{two}/{three}/{four}
----defaults:
--------_controller: DriverSideSiteBundle:NgTest:ngTestReroute
--------'one': null
--------'two': null
--------'three': null
--------'four': null
----methods: [GET]

В вашем контроллере Symfony2 проверьте user-agent, чтобы увидеть, googlebot или bingbot. Вы должны быть в состоянии сделать это с помощью приведенного ниже кода, а затем использовать этот список для поиска ботов, которые вас интересуют (http://www.searchenginedictionary.com/spider-names.shtml) ...

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot"))
{
// what to do
}

Если ваш контроллер находит совпадение с ботом, отправьте ему фрагмент HTML. В противном случае, как и в случае с моим приложением AngularJS, просто отправьте пользователя на страницу индекса, а Angular сделает все остальное.

Ответы на вопрос(1)

Ваш ответ на вопрос