A downside to syndication feed readers respecting permanent HTTP redirects
In theory, well behaved syndication feed readers are supposed to notice when the URL that they are polling changes; when they see a permanent HTTP redirect, they should update the feed URL. I recently ran into a downside to this behavior.
One of the online webcomics sites that I read bits of recently failed to renew its domain name in time. While the domain name was overdue for renewal, the registrar redirected all URLs on the domain's website to a more or less generic domain parking and advertising page on a different domain. They apparently used permanent redirects, because my feed reader dutifully updated all of its feed URLs (and then complained about the new URL being an unparseable feed).
When the domain was renewed and everything started working again, this left me a pretty annoying situation to straighten out; I had to hunt down the original (real) URLs to each feed and re-enter them in my feed reader by hand to correct the situation.
I'm not sure what the right solution to this is, especially because all of them seem likely to require more complicated coding (and data storage). The full bore solution is to keep a history of apparent feed URLs, with some sort of ordering for what one is the presumed currently canonical one; at a minimum you wouldn't switch this until the new feed URL actually gave you a valid (or semi-valid) feed.
(The smaller solution is to not switch the feed URL, despite any redirections, until the new URL gives you a valid feed. This has issues in some obscure situations, but it is an obvious check on the reasonableness of a permanent redirection.)
PS: this situation has bonus irony, because my feed reader didn't used to respect redirections due to a coding bug. Except that I fixed the bug in my own copy when I noticed it due to some other debugging I was doing.
(The sense of the code's 'update URL on redirection' test was reversed, so it was 'updating' the URLs for feeds when they weren't being redirected and reporting this in the debug log, which made me scratch my head and go digging).