I'm not sure if this is an issue with partial caching or my understanfing of it. If I put a cached block in my Layout/Page.ss it caches the first content loaded for that pagetype and not for that specific page. So any page of that pagetype shows the same content unless I flush the cache
Have a look at the documentation for [url=http://doc.silverstripe.org/framework/en/reference/partial-caching]partial caching[/url].
If you don't provide a key that is specific to that page, then the cache block will be the same across pages.
Just wondering if useing something like <% cached $URLSegment, LastEdited %> is the best way to handle partial caching on pages or should the key be genreated from a cusotm function?
Depends on what you're doing, but I find that most page types which are either pulling the current page's $Content, $Title etc, or from another page, or generating a menu, this key seems to work well:
<% cached 'mycachekey', ID, List(Page).max(LastEdited) %>
... content goes here
<% end_cached %>
The cache is invalidated by page ID, and whether any Page or subclass on the site has been modified.
Obviously if you have a lot of special template controls, or time based data inside the cacheblock, you'll want to generate the key from a custom function instead.