Are you using backbone, angular, emberjs, etc, but you're unsure about the SEO implications?
Use this java filter that prerenders a javascript-rendered page using an external service and returns the HTML to the search engine crawler for SEO.
Note:
If you are using a #
in your urls, make sure to change it to #!
. View Google's ajax crawling protocol
Note:
Make sure you have more than one webserver thread/process running because the prerender service will make a request to your server to render the HTML.
1:Add this line to your web.xml:
<filter>
<filter-name>prerender</filter-name>
<filter-class>com.github.greengerong.PreRenderSEOFilter</filter-class>
<init-param>
<param-name>prerenderServiceUrl</param-name>
<param-value>http://localhost:3000</param-value>
</init-param>
<init-param>
<param-name>crawlerUserAgents</param-name>
<param-value>me</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>prerender</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2:add dependency on your project pom:
<dependency>
<groupId>com.github.greengerong</groupId>
<artifactId>prerender-java</artifactId>
<version>1.6.4-SNAPSHOT</version>
</dependency>
- Check to make sure we should show a prerendered page
- Check if the request is from a crawler (
_escaped_fragment_
or agent string) - Check to make sure we aren't requesting a resource (js, css, etc...)
- (optional) Check to make sure the url is in the whitelist
- (optional) Check to make sure the url isn't in the blacklist
- Check if the request is from a crawler (
- Make a
GET
request to the prerender service(phantomjs server) for the page's prerendered HTML - Return that HTML to the crawler
example: someproxy,someproxy1
Important for servers behind reverse proxy that need the public url to be used for pre-rendering.
We usually set the original url in an http header which is added by the reverse proxy (similar to the more standard x-forwarded-proto
and x-forwarded-for
)
If you've deployed the prerender service on your own, set the PRERENDER_SERVICE_URL
environment variable so that this package points there instead. Otherwise, it will default to the service already deployed at http://prerender.herokuapp.com
$ export PRERENDER_SERVICE_URL=<new url>
Or on heroku:
$ heroku config:add PRERENDER_SERVICE_URL=<new url>
As an alternative, you can pass prerender_service_url
in the options object during initialization of the middleware
config filter init param with "prerenderServiceUrl";
If you want to use token with the prerender service, you can config it.
config filter init param with "prerenderToken";
If you want to cache the caching, analytics, log or others, you can config it. It should be instance of "com.github.greengerong.PreRenderEventHandler"
config filter init param with "preRenderEventHandler";
If you want to make sure your pages are rendering correctly:
- Open the Developer Tools in Chrome (Cmd + Atl + J)
- Click the Settings gear in the bottom right corner.
- Click "Overrides" on the left side of the settings panel.
- Check the "User Agent" checkbox.
- Choose "Other..." from the User Agent dropdown.
- Type
googlebot
into the input box. - Refresh the page (make sure to keep the developer tools open).
The MIT License (MIT)