Hi Brian,
An alert is identified by its unique set of labels, so the labels really serve as an identification, and changing / adding / removing any label will semantically mean that it's a different alert than before (with all the effects that has on routing and grouping in Alertmanager). Annotations are non-identifying pieces of extra information on alerts that do not affect routing or grouping at all, so those are indeed likely what you want. What you want to do might work with just labels if your metadata has a stable relationship to existing alerts that wouldn't cause frequent changes to their label set identities (e.g. if it's just a few extra attributes that rarely change). What is the metadata you want to attach?
External labels are applied to every outgoing alert of a Prometheus server equally (not just for some alerts), is that what you want?
Regards,
Julius