NFT artwork not displaying on marketplaces after minting

I built an ERC721 smart contract and successfully minted 10 NFTs on the Polygon network. The artwork files are hosted on my personal server instead of using IPFS. I also set up the proper JSON metadata structure for each token.

The contract deployment and minting process worked fine through Remix IDE. However, I’m facing an issue where the NFT images don’t appear anywhere - not in my MetaMask wallet when I import the token address, not on PolygonScan block explorer, and not on OpenSea marketplace either.

Here’s my contract code:

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

contract DigitalArtV2 is ERC721URIStorage, Ownable {
    uint256 public tokenCounter;
    uint256 public constant TOTAL_SUPPLY = 10;
    string public metadataBaseURI;

    event TokenCreated(address indexed owner, uint256 tokenId, string metadataURI);

    constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) Ownable(msg.sender) {
        metadataBaseURI = "https://192.168.1.100/metadata/";
    }

    function createToken(address _recipient) external onlyOwner {
        require(_recipient != address(0), "Invalid recipient address");
        require(tokenCounter < TOTAL_SUPPLY, "All tokens have been minted");

        uint256 nextTokenId = ++tokenCounter;
        _safeMint(_recipient, nextTokenId);

        string memory metadataURI = string(abi.encodePacked(metadataBaseURI, Strings.toString(nextTokenId), ".json"));
        _setTokenURI(nextTokenId, metadataURI);

        emit TokenCreated(_recipient, nextTokenId, metadataURI);
    }

    function updateBaseURI(string memory _newBaseURI) external onlyOwner {
        require(bytes(_newBaseURI).length > 0, "URI cannot be empty");
        metadataBaseURI = _newBaseURI;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return metadataBaseURI;
    }

    receive() external payable {}
    fallback() external payable {}
}

Any ideas what might be causing this? I expected the NFT images to be visible across all these platforms but I only see generic placeholder icons instead.

Oh wow, same issue Lee mentioned! Quick question - can you actually access those metadata URLs from your browser when you’re off your home network? Try visiting https://192.168.1.100/metadata/1.json from your phone’s data or different connection.

Curious about your setup though - why host on your personal server instead of IPFS? Faster loading or cost reasons? Also, when the images aren’t showing up, any specific error messages in the browser console on OpenSea or PolygonScan?

Your contract looks solid btw, the ERC721 implementation seems correct. But yeah, that local IP is definitely the main problem. Even if you make your server publicly accessible, you’d need solid uptime since NFT marketplaces expect those URLs available 24/7.

Ever considered Pinata or Fleek for hosting? They make IPFS pretty easy and most marketplaces prefer it anyway.

hey, i think ur metadata base uri is set to 192.168.1.100, which is ur local IP. marketplace platforms can’t access it, try using a public url or something like ipfs instead.

The contract looks fine technically, but you’ve got a networking problem. That 192.168.1.100 address is a private IP - it only works on your local network. OpenSea, PolygonScan, and MetaMask can’t reach it from the internet. I hit the same issue when I first deployed NFTs from my home server. Even if you set up port forwarding to make your server publicly accessible, you’ll run into reliability problems. NFT marketplaces expect metadata to be available 24/7, and home internet isn’t built for that kind of uptime. Also, most marketplaces have indexing delays. OpenSea usually takes several hours to pick up new contracts, especially on Polygon. But none of that matters until you fix the metadata access issue first. You need to move to proper hosting. IPFS is standard for a reason - it’s decentralized storage that marketplaces trust and can reliably access.