Plusieurs confusions en français viennent de la différence entre la prononciation orale et la forme écrite des mots.

C'est ce qui explique la confusion entre « bon anniversaire » et « bonne anniversaire ». Une étude affirmerait qu'au moins 13% des cartes d’anniversaire contiennent cette faute d'orthographe !

"Anniversaire" est un nom masculin. On écrit donc "Bon anniversaire"

Cependant, à l'oral on fait la liaison entre le n de "bon" et le "a" de anniversaire. La confusion avec "bonne" vient de là.

Plus d'info : progresser-en-francais.fr