I set og:image but no image appears
There are three usual culprits. (1) og:image is a relative path such as /img/ogp.png — it has to be an absolute URL starting with https://. (2) The image cannot be fetched — it needs a login, is blocked by robots.txt, or redirects to a 404. (3) Caching — services store the card for a URL once it has been shared, so fixing the tag does not change it right away. Re-scrape it in the service's debugger, or add a parameter such as ?v=2 to the URL to get a fresh card.
What size should an OG image be?
1200×630 pixels (about 1.91:1) is the widely used target. Facebook, LINE, Slack and X's large card (summary_large_image) show a wide image close to that ratio and crop anything outside it, so keep text and logos near the centre. Images that are too small may be shown as a small thumbnail instead of a large card.
How long should the title and description be?
Search results cut by display width, so character counts are only a guide. Around 60 characters for the title and around 155–160 for the description tend to show in full on desktop. Put the important words first. Search engines may also rewrite both to match the query.
What happens without twitter:card?
X falls back to og:title and og:image when twitter:title or twitter:image are missing. To get the large-image card, though, set twitter:card to summary_large_image; summary gives a compact card with a small square image on the left.
It says my canonical points to a different URL
The canonical tag tells search engines which URL is the preferred version of the page. If it points somewhere other than the URL you checked, search engines will try to show that other URL instead. http versus https, www versus no www, a trailing slash and query parameters all count as different URLs. That is fine if intended, but every page pointing at the home page is a common mistake.