For instance when using the built in archiving or our own DateTreeArchive. Or when you're simply tidying or restructuring your content tree, this will occur. This was a problem for one of our customers - they shared news on their Facebook page, and about a month later, the link was broken because the archiving had done its job.
The solution: Automated redirects
Retrospectively, the solution seems obvious - and should also be a default feature in every CMS. Epinova.PermanentLinkKeeper - when set up correctly (not a lot) - will handle the problem of moved or renamed pages. Whenever you move or rename a page's UrlSegment, this simple module gets the external URL for the page, and stores it along with it's page ID and language branch. Upon requests to this old, now empty URL, a simple HttpModule looks up the URL in its database and if found, redirects you to the correct page.
The module has been tested in production environments, and easily handle hundreds - if not thousands, of records in the database without any mentionable performance hit. It's not like every single user is going to hit a broken link anyways.
And if you're not using NuGet, you also have to add the following line to the httpModules section of your web.config:
<add name="RedirectModule" type="Epinova.PermanentLinkKeeper.RedirectModule, Epinova.PermanentLinkKeeper"/>