W następnym roku Peloponezyjczycy, w miarę bezpieczni za umocnieniami na Istmie, ociągali się z wyruszeniem przeciwko armii perskiej, czego chcieli z kolei pozostali Grecy. Natomiast Mardoniusz szukał porozumienia dyplomatycznego z Ateńczykami. Sparta, zdając sobie sprawę z niebezpieczeństw wynikających z wycofania się Aten z walki, zgodziła się w końcu wysłać armię poza Peloponez. Tymczasem Mardoniusz po załamaniu się rozmów z Ateńczykami wkroczył do Attyki, próbując siłą wymusić pokój, lecz później wycofał się do Beocji. We wrześniu 479 p.n.e. doszło do bitwy pomiędzy sprzymierzoną armią grecką (liczącą 40 tys. hoplitów i drugie tyle służby oraz lekkozbrojnych) dowodzoną przez spartańskiego regenta Pauzaniasza i perską (według Herodota liczącą 300 tys. żołnierzy z imperium perskiego i 50 tys. Greków). Grecy zwyciężyli, Mardoniusz zginął, resztki armii perskiej uszły na północ. Tymczasem grecka flota dowodzona przez spartańskiego króla Leotychidasa skierowała się ku przylądkowi Mykale w Jonii, gdzie znajdowała się baza perskich sił morskich. We wrześniu Grecy wylądowali na brzegu, doszło do walki i masakry sił perskich oraz zniszczenia wrogich okrętów. Wkrótce w Babilonii wybuchł bunt, który zmusił Kserksesa do udania się do centrum imperium.