Day to day
The shape of the work
A first census on a site nobody has audited reports a lot. The work is not "delete it all" — it is one pass through the enclosures, checking a handful of rows in each, and building a keep list. The second census is much quieter, and that is the point.
Reading a finding
Every row has a Look link, and the screen behind it is the argument the plugin is making.
It shows every probe that ran, what each one searched, and — where a reference was found but did not count — exactly what it was and why. A finding you can check in fifteen seconds is a finding you can act on; a bare list of IDs is not.
The three questions worth asking of any row:
- Did every probe run? A skipped probe is not a clean result.
- Is this the sort of thing that gets referenced dynamically? A hero image assembled in Twig from a field value cannot be seen by anything static. Keep-list it.
- Is the reference weak? If the only thing pointing at an asset is a revision from 2021, the asset is not in use; Zoo shows you that rather than deciding for you.
Using the keep list
When Zoo is wrong, say so. Keep the selected, with a reason, and no census reports it again.
The reason is required, and it is not bureaucracy: whoever reads the keep list next will not be you, and "kept because it's fine" is indistinguishable from a bug a year later. Good reasons look like:
- Linked from the January newsletter, not from the site.
- Filename is assembled in
_partials/downloads.twigfrom a field value. - The API fetches this by handle for the mobile app.
Keep from every audit is for things that should never be reported at all. The default keeps it out of the audit that flagged it, which is usually what you want.
Anything on the keep list can be put back in circulation from Zoo → Keep list.
A sensible order
- Orphaned nested entries and dangling relations first. Both should be zero; a number there means something deleted elements without going through Craft, and it is worth understanding that before deleting anything else.
- Unused tags and empty categories. Cheap, low-risk, and they make the element indexes easier to use immediately.
- Abandoned drafts. Nobody misses these, and they are what makes an editor open an entry and see changes they do not recognise.
- Unused assets, sorted by size. This is where the disk space is. Work down from the top: six videos are worth more than four hundred thumbnails.
- Unreferenced entries. Slowest to check, because a page can be reachable in ways nothing records. Read every one.
- The schema audits, if at all, and on a branch — they are project-config changes that deploy.
Making it a habit
Put php craft zoo/census/run --audit=orphaned-nested-entries in a weekly cron and treat a non-zero
result as a bug report. Add the Zoo census dashboard widget so the number is somewhere people
already look.
Do not automate the deleting. Zoo's guards assume a person read the evidence, and the whole design is built around that being true.