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
allowUserExportis 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:
| Warning | Means |
|---|---|
| A field couldn’t be exported | Its 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 skipped | The file was unreadable, or over maxAssetFileSize. The record and URL are still there; only the bytes are missing. |
| User-owned addresses were held back | allowUserExport 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
--queueon 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:
- Turn Include asset files off for a metadata-and-URLs bundle.
- Narrow the Volumes filter.
- Lower
maxAssetFileSizeso the big video files are referenced rather than copied. - 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 singulartypevalue 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.