From the solidity docs on contract metadata:
You have to publish the metadata file to Swarm (or another service) so that others can access it. You create the file by using the solc --metadata command that generates a file called ContractName_meta.json.
When I use Truffle with an Infura api key, or Remix with MetaMask, does the node publish the contract metadata file on Swarm? Or, if I run my own geth or parity node, does it happen there?