Mayo ended the reign of champions Dublin to set up a western seaboard All-Ireland final against Donegal.
A gripping Croke Park encounter saw James Horan’s men cling on for victory in the face of a furious Dubs fightback.
All six Mayo forwards scored, with Cillian O’Connor converting three ‘45s, as they built up a 0-12 to 0-06 half-time lead.
Mayo moved 10 clear, but Dublin fought back with a string of Bernard Brogan frees, but Mayo hung on to win 0-19 to 0-16.