A customer tagged status-wholesale last spring and status-vip last week now carries both. Nothing is wrong, exactly: Shopify did what it was asked. But a segment built on status-vip now includes a wholesale buyer, and the pricing tier your team reads off the customer profile depends on which tag someone happens to look at first.
Why Shopify doesn't prevent this
Tags in Shopify are free text, and nothing groups them. A person adding a tag, a CSV import and an automation all do the same thing: add it. There is no way to say that two tags answer the same question and only one may stand. Tidying up afterwards is manual, and manual tidying lasts only until the next import.
The fix: one rule per tag, each clearing its family
Name the tags in the set with a shared prefix first: status-vip, status-wholesale, status-retail. Then build one rule for each:
If the customer has tag
VIP→ tag themstatus-vipand remove every tag starting withstatus-.
The rule never removes the tag it is applying, so the customer ends up with status-vip and none of the others. Do the same for each member, and whichever rule matches, exactly one tag from the family remains.
Because the rule clears by prefix instead of naming siblings:
- Adding a member later is one new rule. The existing rules already clear anything starting with
status-, so none of them need editing. - Matching ignores case, so a stray
Status-VIPis cleared along withstatus-vip. - Every rule in the family has to be switched on. A member whose rule is off is a tag no other rule protects, and the set drifts back to holding two.
Keep the groups from overlapping
This pattern works when the groups cannot both be true of the same customer. If one customer can match two rules, which tag survives depends on which ran last, and you should not rely on that. If your groups sit on a number, such as lifetime spend, use ranges instead: give each tier an upper and lower bound and the tags are exclusive by construction, with no removal at all. The VIP tagging guide walks through that case.
Why preview before you switch on
A rule that clears a family removes tags from real customers. Previewing it against a customer you know shows which tag it keeps and which it removes before anything changes, and a new rule starts switched off until you turn it on.
Rules2Tag includes a "Keep one tag from a family at a time" preset that builds exactly this rule: you give it the tag to apply, the tag that identifies the group, and the family prefix.