Troubleshooting

Start with the manifest. contents says what was collected, assets says what happened to the files, and warnings says what Archive couldn’t represent. Most questions are answered there.

The bundle is empty, or a type is missing

  • Was the type ticked? Only the checked content types are collected. The console command defaults to every available type; the form remembers nothing between runs.
  • Is a filter too narrow? The Sections filter limits entries, and Volumes limits assets. A handle typo on the console command silently matches nothing.
  • Are the elements disabled? Disabled elements are excluded unless Include disabled elements is on.
  • Wrong site? With no sites selected, Archive exports the primary site only. Content that lives in a secondary site won’t appear.
  • Users missing entirely? That’s by design until allowUserExport is on. See Users & privacy.

contents in the manifest records a zero rather than omitting the type, so a count of 0 tells you the collector ran and matched nothing — which is a different problem from the collector not running.

Warnings in the manifest

Warnings aren’t failures; they’re the list of things that didn’t travel perfectly. The usual ones:

WarningMeans
A field couldn’t be exportedIts serializer threw. The field is still present, as raw with a null value. Usually a field whose plugin has been removed but whose data is still in the database.
An asset was skippedThe file was unreadable, or over maxAssetFileSize. The record and URL are still there; only the bytes are missing.
User-owned addresses were held backallowUserExport is off. Expected, and reported once rather than per address.

Everything came out as raw

That’s the fallback for a field type Archive doesn’t recognise: the value is passed through the field’s own serializeValue(), which usually means Craft element IDs and plugin-internal shapes. Archive ships serializers for Hyper, FreeLink, Google Maps and SEOMatic; anything else lands in raw until you teach it.

If it’s a field type you control, a serializer is about twenty lines and turns opaque data into something the receiving system can read.

The export times out or runs out of memory

Records are spooled to disk rather than held, so memory should stay flat regardless of site size. If it doesn’t:

  • Run it in the background. Turn on Run in the background on the form, or pass --queue on the console command. That removes the web request’s time limit from the equation.
  • Run it from the console. No request to time out, and PHP’s CLI usually has a much higher memory limit.
  • Lower batchSize. The default is 100 elements at a time. An entry with a deeply nested Matrix field is a big object; 25 may be a better fit.
  • Split the run. One bundle per section, or per volume, is often more useful than one enormous one anyway.

If assets are the problem rather than records, remember that Download remote asset files pulls every file off S3 through your app server. Leaving it off is the fast path.

A bundle is huge

It’s almost always asset files. Options, in the order worth trying:

  1. Turn Include asset files off for a metadata-and-URLs bundle.
  2. Narrow the Volumes filter.
  3. Lower maxAssetFileSize so the big video files are referenced rather than copied.
  4. Leave Download remote asset files off if the media is already on a CDN the new platform can read.

The Bundles list says a file is missing

The ledger row is there but the ZIP isn’t on disk — usually a deploy that wiped storage/, or a bundlePath that points somewhere ephemeral. Delete the row and re-export, and point bundlePath at storage that survives a deploy.

Parsing a bundle back out

Two mistakes that look like plugin bugs and aren’t:

  • Don’t split CSV or NDJSON on newlines. Cells and rich-text values contain them. Use a real CSV reader and a JSON-aware line reader.
  • Use the plural record-type keys. Records are filed under entries, categories, globals — not the singular type value that appears on each record.

Logs

Archive writes to its own file, not into Craft’s general log:

tail -f storage/logs/archive.log

Set logLevel to debug in the settings while you’re chasing something, and back to info or warning afterwards.

Still stuck?

Open an issue on GitHub. The manifest — minus anything sensitive — is the single most useful thing to attach: it records the options, the counts and the warnings for that exact run.