Проблема реального мира:
У меня есть мое приложение на Heroku , которые (насколько я знаю) не могут предложить решение для запуска Headless (Без GUI) Браузер - например, HTMLUnit - для генерации HTML-снимков для Googlebot для индексации моего содержимого AJAX.
Мое предлагаемое решение:
Если вы еще этого не сделали, я предлагаю прочитать полную спецификацию Google по созданию приложений AJAX, которые можно сканировать .
Представьте, что у меня есть:
- a Sinatra приложение, размещенное на Heroku в домене
http://example.com
- , приложение имеет вкладки в верхней части страницы TabA, TabB и TabC
- под каждой вкладкой - SubTab1, SubTab2, SubTab3
- onload, если URL-адрес
http://example.com#!tab=TabA&subtab=SubTab3
, тогда клиентский Javascript принимает location.hash
и загружает в TabA, Содержимое SubTab3 через AJAX.
Примечание: Hash Bang (#!) Является частью google spec .
Я хотел бы создать простой "веб-сервис", размещенный на Google App Engine (GAE), который:
- Принимает параметр URL, например
http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3
(параметр URL должен бытьURLEncoded) - Запускает HTMLUnit для открытия
http://example.com#!tab=TabA&subtab=SubTab3
и запускает клиентский javascript на сервере. - HTMLUnit возвращает DOM, когда все завершено (или прошло около 45 секунд).
- Возвращаемое содержимое может быть отправлено обратно через JSON / JSONP, или, в качестве альтернативы, URL-адрес возвращает файл, сгенерированный и сохраненный на сервере механизма приложений Google (для файловых «кэшированных» результатов) ... открытый дляпредложения здесь.Если URL-адрес файла был возвращен, то вы можете CURL получить исходный код (он же HTML-снимок).
Моему приложению http://example.com
потребуется управлять вызовомна http://htmlsnapshot.appspot.com
... в основном:
- Поймать вызов Googlebots на
http://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3
(сканер googlebot экранирует определенные символы, например,% 26 = &). - Отправить запрос от бэкэнда на
http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3
(параметр URL должен быть в кодировке URLE) - Визуализировать возвращенный моментальный снимок HTML на веб-интерфейс.
- Google индексирует содержимое, и мы радуемся!
НадеюсьУ меня нет опыта работы с Google App Engine, Java или HTMLUnit.
Возможно, я смогу выяснить это ... и опубликую свои результаты, если я это сделаю.
В противном случае я чувствую это ОЧЕНЬ хорошая возможность для того, чтобы кто-то написал офигенное сообщение в блоге, в котором изложено пошаговое руководство для новичков по настройке подобного веб-сервиса.
Это познакомит больше людей с отличным (и бесплатным!) Google App Engine.Кроме того, это, несомненно, будет способствовать тому, что все больше людей примут спецификации Google для контента AJAX для сканирования ... что-то, от чего мы все сможем извлечь выгоду!
По мере того, как спецификация Google получает все большее признание, "препятствие" для установки браузера без головы будетотправить много разработчиков Поиск в Google для ответов!Получить сейчас с ответом на славу и славу!(отредактируйте: по крайней мере я буду петь ваши похвалы).
Нажмите меня в твиттере @_chrisjacob
, если вы хотите обсудить решения.