Option 3 swapping values into the default tags is a neat way to avoid user-agent sniffing. One edge case I wondered about: when the API returns a 404 for a deleted post, the function falls back to the shell with generic tags, so crawlers get a 200 and a default card for a page that no longer exists. Do you return a real 404 status from the edge in that case, or is the generic card fine for you?