My opinion: you shouldn't need to manually tag anything because it should be done automatically via your ci/cd.
With that said, in some cases deploying everything this way is not realistic. I have always admired Netflix's "frigga" naming conventions: https://github.com/Netflix/frigga
I was exposed to it by working with Spinnaker which uses it. Pretty clean way to organize everything.
Here is a nice quickstart: https://github.com/spinnaker/moniker
> Every resource is assigned a Moniker which exposes app, stack, detail, and cluster fields. If, for example, a Moniker is assigned using Frigga, we can say that cluster = app-stack-detail.