Я решаю, безопасно ли разрабатывать мое клиентское приложение в AngularJS с помощью pushState.
Я читал, что при использовании pushState в приложении AngularJS нам не нужно беспокоиться о Googlebot, потому что теперь он может выполнить достаточно JS для создания фрагмента HTML для себя. Но потом я задаюсь вопросом о Bing, Facebook и других ботах и скребках. Учебники, которые я видел для создания AngularJS SEO-friendly, имеют дело с приложениями, использующими hashbangs (#!). Они не относятся ко мне, так как я не использую hashbangs.
Есть ли у кого-нибудь понимание этой проблемы? Каковы некоторые методы для обеспечения приложения AngularJS , использующего pushState, SEO-friendly и Social-scraper-friendly? Если вы пользуетесь услугами, такими как Seo4Ajax или prerender.io, я буду благодарен вам за ваши мысли.
Примечание.. Насколько я понимаю, при разработке одностраничных приложений за последние пару лет было необходимо отправить фрагменты HTML в поисковые роботы. Это было достигнуто за счет использования hashbangs и метатега, которые позволяют Google, Bing и Facebook знать, что при выполнении запроса необходимо заменить bang (!) На _escaped_string. На сервере, который вы указали для запросов с _escaped_string и доставляете соответствующий фрагмент HTML, используя инструмент для генерации фрагментов HTML, таких как phantomJS.
Теперь, когда у нас есть pushState, я не вижу, как мы указываем javascript-less ботам какую часть URL-адреса переписываем с помощью _escaped_string или даже если это необходимо. У меня возникли проблемы с поиском любой информации за пределами "у вас будет сайт с Google" ).
Вот некоторые другие вопросы SO, которые похожи, но остались без ответа.
Angularjs против SEO против pushState
.htaccess для ботов SEO, сканирующих одностраничные приложения без hashbangs
Вот решение, которое я разместил в этом вопросе и рассматриваю для себя в случае, если я хочу отправить фрагменты 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 проверьте пользовательский агент, чтобы узнать, является ли он googlebot или bingbot. Вы должны сделать это с помощью кода ниже, а затем использовать этот список для целевых ботов, которые вас интересуют (http://www.searchenginedictionary.com/spider-names.shtml)...
if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot")){
// what to do} -
Если ваш контроллер обнаружит совпадение с ботом, отправьте ему фрагмент HTML. В противном случае, как и в случае с моим приложением AngularJS, просто отправьте пользователя на индексную страницу, а Angular будет делать все остальное.