It's an ancient practice to return null to indicate some kind of failure or problem, probably dating back to the first days of C. This forces you to check for nulls. But there is a "null object"
pattern that you can use. Instead of returning null, return a special instance or subclass of the expected object with the special behavior. Frinstance:
You could change getPage to return a NullPageObject which extends PageObject to always return "" and eliminate the
test for null.
Of course this mostly applies to where you are in control of introducing the null pointers in the first place. And it might be a strategy for handling some that are created by code that you cannot change.
Here's an academic discussion ... I just Googled for "null object pattern"
http://www.cs.oberlin.edu/~jwalker/nullObjPattern/