Skip to content

Provenance

What platforms strip from shared images: EXIF, XMP and C2PA

By Hannah Voss, Editor · Reviewed September 2026 · 7 min read

Quick answer

Shared images carry up to three metadata layers: EXIF from the camera, XMP and IPTC fields from editors, and a signed C2PA manifest. Direct uploads and link preview fetches are typically re-encoded, which drops all three, and a byte-preserved manifest fails once pixels change. Probe your channels with marked test files, and keep the facts on the page too.

A cut-paper link preview card with a grey landscape panel, two blank text bars and a small embossed seal in one corner
The three metadata layers inside a JPEG, and the pixels underneath01EXIFcamera fields, APP1 segment02XMP and IPTCcaption, credit, source type03C2PA manifestsigned history, JUMBF box04Pixelsthe only layer that always ships
Each layer sits in its own segment. A tool that decodes the pixels and writes a new file decides afresh which segments to copy.

Three metadata layers, three ways to die

EXIF is the oldest layer: a TIFF-structured block of camera fields, such as make, model, exposure, orientation and GPS position, stored in a JPEG's APP1 segment. The IPTC Photo Metadata User Guide describes how that block sits beside the IPTC and XMP layers. A decoder that re-encodes the pixels without copying that segment drops EXIF completely. Most upload pipelines do exactly that, and some apply the orientation field to the pixels first, so the image looks correct while the field is gone.

XMP and IPTC fields are the descriptive layer: caption, credit, copyright, and the digital source type that says whether an image came from a camera or a trained algorithm. The IPTC Photo Metadata Standard specifies how these fields are stored, as an XMP packet and in the older IIM block. Editors usually copy them on export; optimisers and upload pipelines usually do not. They die by omission, because most software never reads them.

A C2PA manifest is the signed layer. The C2PA specification stores the manifest in a JUMBF box and binds it to the content through hashes over the asset, so the manifest is valid only for the exact bytes that were signed. This layer dies twice: when a pipeline drops the box, and when it keeps the box but changes the pixels, which leaves a manifest present but invalid. The specifications index lists the current version.

The two ways an image reaches a platform behave differently. A direct upload hands the platform your file; it is typically resized and re-encoded, and the platform may read the metadata before discarding it, which is how some AI labels are applied. A link preview fetch is a request to your server for the address in og:image, followed by the platform's own resize and re-encode; nothing about it gives your metadata a route to the card. Both channels typically end with a file that carries little or nothing.

A third channel matters: a reader saving your image and re-uploading it, or forwarding it through a messaging app. Every hop re-encodes, and by the third hop no layer is left. The steps before the platform, on your own WordPress and CDN, are covered in where image metadata gets stripped on your own site.

What platforms strip from shared images: channel by layer

The table gives typical outcomes, because behaviour differs by platform and changes without notice. Confirm each row for your own channels with the probe below, and date the results.

ChannelEXIFXMP and IPTCC2PA manifestHow to check
Direct upload to a networkTypically strippedTypically stripped; may be read firstTypically stripped, or kept but invalidDownload the posted image
Link preview fetch of og:imageTypically strippedTypically strippedTypically strippedDownload the card image from the debugger
Messaging app forwardTypically strippedTypically strippedTypically strippedHave the recipient send the file back
Download from a platform after postingTypically absentTypically absent, sometimes rewrittenTypically absentCompare with your original
Your own CDN with metadata preservedKeptKeptKept and valid if bytes are unchangedFetch with and without the CDN; compare hashes

A worked probe: 12 images with distinctive values

The reliable way to know what a channel does is to send it a file whose fields you can recognise in the bytes. Prepare 12 JPEGs at 1200 by 630. In each, set the EXIF artist field to a marker such as PROBE-EXIF-0412, the XMP creator and IPTC credit to PROBE-XMP-0412, the digital source type to the value for a trained algorithm, and sign a manifest. Push four images through each of three channels: direct upload, a link share whose og:image is the probe, and a messaging forward. Download every copy, search its bytes for the markers and open it in a C2PA reader.

The results in this example are invented but typical of what such probes find. Of the 4 direct uploads, 0 kept the EXIF marker, 0 kept the XMP marker, and 1 kept a manifest box that a reader reported as present but invalid, because the pixels had been resized. The 4 link shares and the 4 messaging forwards kept no layer at all. The control, the 4 originals fetched from the publisher's own CDN with metadata preserved, kept all three layers with hashes identical to the uploads. The probe took under an hour and produced a dated answer for those channels.

Metadata layers surviving each channel in the worked probe (invented example, 3 layers by 4 images)Own CDN, preserved12 of 12 layersDirect upload1 of 12, invalidLink preview fetch0 of 12Messaging forward0 of 12
Illustrative counts: 4 images with 3 layers each per channel. Your probe will produce its own numbers.

Stripped, rewritten and preserved

A downloaded copy is in one of three states, and the log should say which. Stripped means the segment is absent: no EXIF block, no XMP packet, no JUMBF box. Rewritten means a segment is present but its contents are the platform's: a new software tag, orientation set to normal, an XMP packet with none of your fields. Preserved means the bytes match: your markers, and for a manifest, a signature that still validates. Only the third state carries provenance. Rewritten fields mislead most, because a reader shows a populated panel.

StateHow you recognise itWhat it means for provenance
StrippedSegment absent; file smaller; reader shows nothingNothing travels; rely on the page
RewrittenFields present but the platform's; manifest present but invalidProves nothing about the original
PreservedYour markers present; manifest validates; hash matchesCredentials can be checked

What a publisher can do

You cannot make a platform keep your metadata, so put the facts where a reader can find them without the file. Keep the Content Credential on the page: a caption saying how the image was made, a link to the original signed file at a stable address, and the signer's name. Keep the digital source type in the file you serve, so a platform that reads before it strips gets the right value; the guide to labelling AI-generated images in link previews gives the wording. Write alt text that describes the image plainly. Serve og:image at the size set out in choosing an Open Graph image size, so at least the crop is yours.

  • Point og:image at the signed original and exclude it from optimisation.
  • Publish a verification path: original file, signer, date. A reader with a stripped copy can come to your page and check it, using the routine in checking Content Credentials before you share.
  • Repeat the probe after platform announcements about provenance and after any change to your own pipeline.

Pitfalls

  • Reading a populated metadata panel as proof of preservation. Check for your own markers or compare hashes first.
  • Probing with an image whose fields you did not set. Without known values you cannot tell stripped from rewritten.
  • Assuming a manifest that survived as bytes is still valid. The signature covers the pixels; resized pixels fail it.

The provenance section covers the signals that do not depend on the file: the byline, the head tags and the disclosure line that travel with the page.

Sources

Questions

Is EXIF stripped on upload to social media?

Typically yes. Most upload pipelines re-encode the image without copying the EXIF segment. Confirm for your platforms by uploading a file with a known artist field and downloading the posted copy.

Does XMP metadata survive on social media?

Typically not. XMP and IPTC fields are usually dropped on re-encode, though some platforms read the digital source type before discarding it. Probe with known values rather than assuming.

Is the C2PA manifest stripped when an image is shared?

In a link preview the fetched image is typically re-encoded, which removes the manifest or leaves it invalid. On direct upload behaviour varies by platform; a downloaded copy tells you the state on that day.

What is the difference between a stripped and a re-encoded image?

Stripping removes metadata segments and can leave pixels untouched. Re-encoding rewrites the pixels, which usually drops metadata too and always invalidates a C2PA signature, even if the manifest bytes are copied.

Does the preview image keep any metadata?

Typically none. The network fetches og:image, resizes it and re-encodes it. Keep the caption, credit and credential on the page.

Share this guide

Hannah Voss, Editor. Checks every guide against a working WordPress install and the networks' current documentation. Last reviewed September 2026.

  1. Where image metadata gets stripped: WordPress, CDNs and uploadsWhere IPTC, EXIF and Content Credentials metadata is lost between your camera and a reader's feed: WordPress resizing, optimisers, CDNs and social uploads.5 min read
  2. Content Credentials on shared images: what survives a shareWhat C2PA Content Credentials are, why WordPress image sizes and social uploads often strip them, and how to keep provenance on the images you share.6 min read
  3. Checking Content Credentials before you share an imageHow to check an image's Content Credentials before you share or publish it: what a C2PA manifest shows, what a missing one means, and what to record.5 min read