Skip to content
java framework for prerender
Branch: master
Clone or download

Latest commit

greengerong Merge pull request #51 from thoop/patch-1
Add a check for our X-Prerender header
Latest commit f7fc7a5 Oct 28, 2018


Type Name Latest commit message Commit time
Failed to load latest commit information.
demo Remove .DS_Store files May 7, 2016
src added a test for the X-Prerender header check Oct 16, 2018
.gitignore Remove .DS_Store files May 7, 2016
.travis.yml Update .travis.yml May 7, 2018
LICENSE.txt LICENSE Aug 1, 2018 trying to re-run CI May 11, 2018
pom.xml [maven-release-plugin] prepare for next development iteration Oct 8, 2015
prerender-java.iml readme & update prerender client Oct 8, 2015

Prerender Java Build Status

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:

          <param-value>[get from prerender:]</param-value>

2:add dependency on your project pom:


How it works

  1. Check to make sure we should show a prerendered page
    1. Check if the request is from a crawler (_escaped_fragment_ or agent string)
    2. Check to make sure we aren't requesting a resource (js, css, etc...)
    3. (optional) Check to make sure the url is in the whitelist
    4. (optional) Check to make sure the url isn't in the blacklist
  2. Make a GET request to the prerender service(phantomjs server) for the page's prerendered HTML
  3. 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 specifically want to make sure that the Prerender service queries using https or http protocol, you can set the init-param protocol to https or http respectively.

Using your own prerender service

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

$ 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";

prerender service token

If you want to use token with the prerender service, you can config it.

 config filter init param with "prerenderToken";

prerender event handler

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 your URLs use a hash-bang:

If you want to see `http://localhost:3000/#!/profiles/1234`
Then go to `http://localhost:3000/?_escaped_fragment_=/profiles/1234`

If your URLs use push-state:

If you want to see `http://localhost:3000/profiles/1234`
Then go to `http://localhost:3000/profiles/1234?_escaped_fragment_=`

project demo test url:



The MIT License (MIT)

You can’t perform that action at this time.