What is NFT Metadata?
Learn what NFT metadata is, how `tokenURI` works, why JSON and IPFS are common, and the trade-offs around mutability, storage, and display.

Introduction
NFT metadata is the descriptive information that tells software what an NFT is supposed to represent. Without metadata, an NFT is usually just a token contract address plus a token ID: a unique entry in a ledger, but not yet a picture, a character, a ticket, a music file, or a game item in any human-meaningful sense. Metadata is the bridge between the token’s on-chain identity and the off-chain experience that wallets, marketplaces, and apps present to users.
That bridge solves a very specific problem. Blockchains are good at storing small, verifiable state changes under strong consensus. They are generally bad, or at least expensive, at storing rich media and long descriptive records at scale. NFT systems therefore split the job in two. The chain records ownership and transfer rules. Metadata provides the context that lets software render and interpret the token. Once you see that separation clearly, most NFT design choices make sense: tokenURI, JSON files, IPFS links, update events, and the recurring arguments about whether an NFT is truly “on-chain.”
The important subtlety is that metadata is not just decoration. It often determines what buyers think they are purchasing, what rarity tools calculate, what marketplaces display, and whether an NFT remains intelligible years later. So the central question is not merely what fields are in the JSON? It is what part of the NFT’s meaning lives where, under whose control, and with what durability?
How does an NFT's tokenURI connect a token to its metadata?
The core mechanism in Ethereum’s ERC-721 standard is simple: an NFT contract can expose a function called tokenURI(tokenId). If implemented, that function returns a URI for a given token. The ERC-721 metadata extension is optional, but it became the practical convention most wallets and marketplaces rely on. The extension also allows a collection-level name() and symbol().
This is the key architectural move: the token does not usually contain all of its human-readable description directly. Instead, it contains or computes a pointer. That pointer leads a client to metadata, often a JSON document. The ERC-721 specification says the returned URI may point to a JSON file conforming to the ERC-721 Metadata JSON Schema. At minimum, that schema defines familiar fields such as name, description, and image.
A useful way to think about this is that the blockchain answers **who owns token 1234? while metadata answers what should token 1234 look like, sound like, or mean? ** The first question needs global consensus and strict state transitions. The second often needs more space, more flexibility, and richer media formats than a chain comfortably provides.
A simple example makes this concrete. Suppose a collection contract mints token #57. A wallet sees that the contract supports ERC-721 metadata, calls tokenURI(57), and gets back something like ipfs://bafy... /57.json or https://example.com/metadata/57. The wallet fetches that document, reads fields like name: "Astral Fox #57", description, and image, then renders the NFT for the user. The token itself established ownership; the metadata made the asset legible.
That basic pattern appears beyond Ethereum too, even if the exact standards differ. Marketplaces such as Magic Eden display chain-specific identifiers alongside creator-supplied metadata and traits across Solana, Ethereum-compatible chains, and Bitcoin Ordinals. The details vary by ecosystem, but the underlying problem is the same: a token or inscription identifier alone is not enough for a good user experience. Something has to supply the descriptive layer.
What fields are in NFT metadata and why do they matter?
The reason NFT metadata converged on JSON is practical rather than mysterious. Clients need a structured format that is lightweight, widely supported, and easy to extend. JSON gives wallets and marketplaces a predictable object they can fetch and parse.
In ERC-721’s schema, the canonical minimum is small: name, description, and image. That already tells you something important about the standard’s philosophy. It does not try to define every possible kind of digital object. It standardizes only enough for broad interoperability. A wallet can show a title, some explanatory text, and an image without knowing the creator’s domain-specific semantics.
From there, projects typically add more fields. Traits or attributes are common because marketplaces use them to group items and compute collection-level percentages. Media links beyond static images are also common in practice, although not all such conventions come from the ERC-721 core spec itself. The recurring pattern is this: fields become important when many clients can interpret them the same way.
That is why metadata is less about artistic expression than about coordination. A creator may care about lore, animation, unlockable content, or in-game statistics. A wallet cares whether it can render the NFT. A marketplace cares whether it can index traits, show rarity-related context, and refresh data when something changes. Metadata is the shared interface where those needs meet.
But there is a limit to standardization. The more tightly a standard specifies every field, the less flexible it becomes across different NFT types. The more loosely it specifies fields, the more clients have to rely on custom conventions. NFT metadata lives in that tension: enough structure for interoperability, enough looseness for experimentation.
Why is NFT metadata typically stored off-chain?
| Storage type | Durability | Cost | Control | Best for |
|---|---|---|---|---|
| HTTP URL | Low; link-rot risk | Low | Centralized host | Small projects, mutable assets |
| IPFS (CID) | Medium; content integrity | Low | Distributed, depends on pins | Integrity-focused metadata |
| IPFS + pinning / Filecoin | Higher; paid persistence | Moderate (deals/pinning) | Distributed with providers | Longer-term availability plans |
| Arweave | High; upfront endowment | Higher one-time fee | Decentralized, immutable | Perma-storage needs |
A smart reader often asks: if the NFT is on-chain, why isn’t the metadata on-chain too?
The short answer is cost and scale. Storing large strings, images, video, or richly structured records directly on a blockchain is expensive. Even when feasible, it burdens every full node with preserving and serving data that may be much larger than the consensus-critical information needed to track ownership. So most NFT systems keep the token logic on-chain and put metadata somewhere else.
That “somewhere else” can mean very different things. The weakest version is an ordinary web server, where tokenURI returns https://... . This is cheap and simple, but it introduces a conventional hosting dependency. If the server changes files, disappears, or stops paying its bills, the NFT may still exist on-chain while its displayed meaning degrades or vanishes.
A stronger version uses content-addressed storage such as IPFS. Here, the URI can be ipfs://..., where the identifier refers to the content itself rather than to a location controlled by one hostname. IPFS recommends using ipfs:// URIs as the canonical form for NFT-linked metadata and assets, precisely because that avoids tying the reference to any single gateway operator. In that model, the token points to content by its hash-derived identifier, which is a better fit for integrity: if the content changes, the content identifier changes too.
But content addressing does not automatically solve availability. This is one of the easiest things to misunderstand. IPFS tells you what content you want, not who promises to keep serving it forever. Unpinned content can be garbage-collected locally. Gateway URLs are convenient for compatibility, but they are not canonical and can fail if the gateway operator goes offline. So an NFT that points to IPFS may still become hard to retrieve if nobody persistently stores that content.
This is why pinning matters. In IPFS, pinning tells a node to keep an object so it is not removed by garbage collection. Recursive pins preserve the full content graph, not just one block. Projects that rely on IPFS in any serious way therefore need an availability plan, whether that means running their own infrastructure, using remote pinning services, or layering in longer-term storage systems.
Some projects use Filecoin-backed services or other preservation layers to improve durability. Filecoin’s model is based on storage deals: clients pay miners to store data, and miners prove over time that they are maintaining storage. That is a real storage market, not magic permanence. Deals and sectors have life cycles and expiration points, so continued availability depends on operational choices such as renewal and replication. Other projects prefer Arweave’s model, which is explicitly engineered around very long-term storage funded by an up-front endowment. That shifts the assumptions again: from recurring storage maintenance toward a permanence-oriented economic design, though still with practical caveats about operator behavior and accessibility.
So the deep point is this: off-chain metadata is not one thing. It ranges from fragile location-based hosting to content-addressed storage with active persistence, to storage networks built around long-horizon incentives. When people say an NFT’s metadata is “off-chain,” that alone tells you almost nothing about durability.
What does it mean that tokenURI can be mutable?
The ERC-721 standard makes a subtle but consequential choice: the URI returned by tokenURI may be mutable. That is, the pointer can change over time. Even if the URI stays the same, the content behind a location-based URL might change. This means that the contract-level interface does not, by itself, guarantee permanence.
That design is neither a bug nor a contradiction. It reflects the fact that some NFTs are intended to evolve. A game item might level up. A ticket might reveal seat information later. A dynamic NFT may change based on oracle data or project-defined state transitions. In these cases, mutability is the feature.
But the same flexibility creates a trust question. If metadata can change, who decides when it changes? Under what rules? Can the creator replace the image, edit the attributes, or switch the metadata host entirely? The ERC-721 spec does not define the governance model for metadata changes. It standardizes how clients ask for metadata, not who controls it.
That gap is where project design choices become economically important. If buyers think they are purchasing a fixed digital collectible, but the issuer retains unilateral power to rewrite the metadata later, then the real object of trust is not just the contract. It is the update authority behind the metadata path.
How do projects generate and serve NFT metadata (baseURI vs per-token)?
| Pattern | On-chain cost | Flexibility | Failure mode | Best for |
|---|---|---|---|---|
| Base URI concatenation | Low gas cost | Low per-token flexibility | Base change affects all tokens | Large static collections |
| Per-token URI storage | Higher gas cost | High per-token control | Higher on-chain storage burden | Dynamic or unique tokens |
There are two common implementation patterns in ERC-721 systems, and the difference matters because it changes cost, flexibility, and failure modes.
The first pattern is base URI concatenation. A contract defines a base path through an internal baseURI, and tokenURI(tokenId) returns that base plus the token ID. If the base is ipfs://bafy.../ then token 57 resolves to ipfs://bafy... /57. This is cheap because the contract does not need to store a different full URI for every token. It works especially well for collections whose metadata files follow a predictable naming scheme.
The second pattern is per-token URI storage. OpenZeppelin’s ERC721URIStorage, for example, stores a token-specific URI and provides _setTokenURI. This is more flexible because each token can point anywhere, and those pointers can be changed individually. The cost is higher on-chain storage use, and therefore higher gas costs. The benefit is granular control.
The right mental model is not “which is better?” but “what kind of collection are you building?” If every token follows the same path template and metadata is mostly static, a base URI is simple and efficient. If tokens need custom destinations or individual updates, stored per-token URIs may be worth the cost.
A prose example helps. Imagine a 10,000-item generative collection where every token has one JSON file already uploaded under a single IPFS directory. The collection contract can set baseURI to that directory CID, and every wallet can derive each token’s metadata location by appending the token ID. Now imagine a game where each sword NFT gains new stats independently over time. A single shared base path may no longer be enough, especially if the project wants bespoke metadata updates per token. In that setting, per-token URI management is more natural.
How do platforms detect and refresh changed NFT metadata?
A quiet but important problem in NFTs is that off-chain clients need to know when to refresh metadata. If a token’s JSON changes but the contract emits no standardized signal, marketplaces and wallets may keep showing stale information until they happen to re-fetch it.
ERC-4906 exists to address exactly that problem. It is an optional ERC-721 extension that defines two events: MetadataUpdate(tokenId) and BatchMetadataUpdate(fromTokenId, toTokenId). When a token’s JSON metadata changes, implementations must emit one of these events. Third parties can listen for the event, then re-query tokenURI and fetch the updated metadata.
The design here is intentionally minimal. The event does not carry the new metadata payload or a diff of what changed. That omission is deliberate: NFT metadata structures vary too much, and adding arbitrary payloads would make life harder for indexers. So the event acts as a signal rather than a container. It says, in effect, refresh this token’s metadata now.
This matters most for dynamic NFTs, reveal mechanics, and any collection where metadata evolves post-mint. Without a shared update signal, every marketplace needs collection-specific logic or periodic polling. With it, clients have a standard hook.
Still, the extension is optional, just like the metadata extension itself. So the ecosystem remains partly convention-driven. Some contracts emit clear update signals; others rely on ad hoc refresh buttons, custom indexing arrangements, or eventual cache expiry. That is why two marketplaces can show different states for the same NFT at the same moment.
Who can change an NFT's metadata and how is that authority managed?
| Model | Authority | Risk profile | Transparency | Best practice |
|---|---|---|---|---|
| Ownable | Single owner key | High single-point risk | Low unless publicly disclosed | Avoid renouncing owner; disclose address |
| Role-based | Named updater roles | Moderate; admin concentration risk | Moderate | Separate updater from admin roles |
| Multisig / Timelock / DAO | Collective control or delay | Lower immediate risk, procedural risk | High (on-chain proposals/events) | Use timelock + multisig for changes |
Once metadata can change, the next question is authority. This is not primarily a metadata-format issue; it is an access-control issue.
At the contract level, projects often protect metadata-changing functions with simple ownership or with role-based permissions. OpenZeppelin’s Ownable pattern gives a single owner account the right to perform administrative actions. That is easy to reason about, but it centralizes power. If the owner can change a base URI or trigger metadata updates, then the owner effectively controls how NFTs are represented.
Role-based access control allows finer separation. A project can define a dedicated updater role without giving that account power over every other administrative function. That is usually safer in principle because it narrows authority. But it also introduces administration risk: who grants and revokes that role, and how concentrated is the default admin power?
For especially sensitive setups, teams may put admin powers behind multisigs or timelocks. A timelock does not remove trust, but it changes the mechanism. Instead of allowing instant unilateral changes, it creates a delay during which users can observe upcoming actions. That can matter if metadata updates affect the perceived nature or value of a collection.
The important distinction is between technical mutability and governed mutability. A contract may allow metadata changes in code, but the real user risk depends on who holds the keys, whether powers are shared, and whether changes are delayed or constrained.
How do marketplaces and wallets shape what users see for an NFT?
In theory, metadata is just fetched from tokenURI. In practice, marketplaces and wallets build caching, indexing, trait calculation, media pipelines, and fallback logic around it. That practical layer strongly shapes how NFTs are experienced.
Magic Eden’s item displays illustrate this well. Across chains, it surfaces token identifiers, contract or mint information, owner data, royalty-related fields, and traits with collection percentages where available. Notice what this means: metadata is not just a blob retrieved and shown raw. It is interpreted, combined with on-chain facts, and re-presented through marketplace-specific product choices.
This leads to an important consequence. The user does not see “the metadata” directly. The user sees a client’s rendering of metadata. If the client caches aggressively, fails to re-fetch, interprets traits differently, or cannot resolve a media link, the NFT experience changes even if the underlying token and metadata source remain the same.
Infrastructure dependencies matter here too. A widely used RPC or API outage can interrupt minting, metadata reads, and marketplace operations even when the underlying blockchain remains live. Incidents involving shared providers show that “decentralized” user experience can still depend on centralized service layers. Metadata retrieval often inherits that fragility because wallets and marketplaces depend on gateways, RPC providers, indexers, and media-serving infrastructure.
So when people ask whether NFT metadata is decentralized, the honest answer is layered. The token may be on a decentralized ledger. The metadata may be content-addressed. Yet the user-facing experience may still depend on a small number of infrastructure operators.
What misconceptions about NFT metadata should buyers avoid?
The simplest misconception is to treat metadata as either fully on-chain or fully off-chain, as if those were binary categories. Reality is more granular. The contract may store a pointer on-chain, the JSON may be off-chain, the image may be on IPFS, the video may live elsewhere, and the marketplace rendering may depend on a centralized cache. Different parts of the NFT can have different trust and durability properties.
Another misconception is to equate content addressing with permanence. A CID gives integrity: if you retrieve data for that CID, you know which content you got. It does not guarantee someone will keep serving that content. Availability requires continued storage and retrieval paths.
A third misconception is to assume that if metadata is mutable, the NFT is somehow invalid. Not necessarily. Mutability can be intrinsic to the asset’s purpose. The real issue is whether mutability is expected, legible, and governed in a way users can understand.
Finally, standards do not settle social meaning. ERC-721 can tell a wallet how to ask for metadata. ERC-4906 can tell it when to refresh. Neither can tell a buyer whether a collection’s metadata policy is trustworthy, whether storage will be funded for decades, or whether a marketplace will render the asset correctly in five years.
Conclusion
NFT metadata is the descriptive layer that makes a token intelligible to humans and software. Mechanically, it usually works by having the token expose a tokenURI that points to JSON, which in turn points to media and other descriptive fields.
The crucial thing to remember is that metadata is where many of an NFT’s real assumptions live: what the asset means, where that meaning is stored, whether it can change, and how durable the links are. If ownership is the ledger layer of an NFT, metadata is the interpretation layer; and understanding NFTs requires understanding both.
How do you evaluate an NFT or token before buying it?
Evaluate an NFT by checking its on-chain pointers, the contract’s update authority, and how the metadata and media are hosted; then use Cube Exchange to fund your account and execute a controlled trade. Start with forensic checks (tokenURI, CIDs, mutability signals) to understand what you’re buying, and finish by placing a limit order or managed purchase on Cube.
Frequently Asked Questions
- Why is NFT metadata usually stored off-chain instead of directly on the blockchain? +
- Because blockchains are optimized for small, consensus-critical state (ownership and transfers) and storing large strings or media on-chain is expensive and burdensome for nodes, so most systems keep token logic on-chain and put descriptive JSON and media off-chain for cost and scale reasons.
- If an NFT’s tokenURI uses an IPFS CID, does that guarantee the asset will always be retrievable? +
- No — a content-addressed CID guarantees integrity (you can verify the content matches the CID) but not availability; if nobody pins or otherwise persists the content it can become hard or impossible to retrieve even though the CID is stable.
- What practical steps can an NFT project take to improve long-term metadata availability? +
- Projects commonly combine measures: pin JSON and media (self-host or via remote pinning services like Pinata/Filebase), use Filecoin storage deals for paid replication or Arweave for a permanence-oriented endowment, and run their own infrastructure or use third-party preservation services — each option improves durability but requires operational or economic choices.
- Who can change an NFT’s metadata and how do projects typically secure or delegate that power? +
- Control is determined by the project’s access-control design: many use Ownable (single owner), role-based AccessControl for narrower updater roles, or governance patterns like multisigs and timelocks to limit or delay changes; the contract’s code and who holds keys are what actually determine who can change metadata.
- What problem does ERC-4906 solve for NFT metadata, and what does it not provide? +
- ERC-4906 provides two optional events, MetadataUpdate(tokenId) and BatchMetadataUpdate(from,to), to signal clients to refresh metadata; it intentionally does not include the new payload or diffs and remains optional, so adopters still must solve how indexers fetch and reconcile changed fields.
- When should a collection use baseURI+tokenId concatenation versus storing a per-token URI on-chain? +
- Use baseURI concatenation when metadata files follow a predictable naming scheme and you want gas-efficient on-chain storage; use per-token URIs (e.g., ERC721URIStorage) when tokens need bespoke destinations or individual on-chain-updatable pointers, accepting higher gas costs.
- If an NFT’s metadata is mutable, does that mean the NFT is "broken" or unreliable? +
- Not necessarily; mutability can be an intentional feature (for games, reveals, dynamic art), but it creates a trust question — buyers and integrators need to know whether changes are expected, who controls them, and whether there are governance constraints like multisigs or timelocks.
- How do marketplaces and wallets shape what users actually see for an NFT, beyond the tokenURI JSON? +
- Marketplaces and wallets do more than fetch raw JSON: they cache, index traits, compute collection percentages, transcode media, apply fallbacks and rendering rules, and may rely on shared RPC/gateway infrastructure — so the user-facing representation can differ from the canonical metadata depending on client behavior and infrastructure availability.
Related reading