The two usual culprits are missing open graph tags, or something either blocking the Discourse UA or cloud provider IP ranges. Just because we can see the tags locally in our browser doesn’t mean the server necessarily can.
A bit of tinkering in cURL from your VPS will usually identify the cause.