The price needs to have escape. Money without currency returns HTML; since admin for currency formatting will let you wrap the Liquid output of product.price in HTML tags. This is a very old feature of Shopify, and when currency switching was introduced to the platform, the HTML output was dropped from anything that isn’t the shop.currecy.
The currency format should be cart.currency. That will match the currency used for a selected market / market in the URL route. If shop.currency is used, then it will always show the store’s default currency - which may not match what the actual price is based on.
Having the price as product.selected_or_first_available_variant would be a good change. The page_image object reflects the selected or available variant, so there’s no risk of a mismatch between the image and the price.
Thanks for the link on the open graph price format that shows there should be no separators (aside from decimals). Unfortunately there’s no currency formatting option currently to remove the commas. I couldn’t think of a workaround since {{ price | money_without_currency | replace: ',' , '' }} may not work since Liquid doesn’t know which currency format the store is using. I can raise this internally.