Goalkeeper Mat Ryan conceded 74 seconds into his debut for Arsenal as Aston Villa completed their first top-flight double over the Gunners for 28 years.
Former Arsenal keeper Emiliano Martinez started the move which led to Bertrand Traore pouncing on a mistake by Cedric Soares before Ollie Watkins scored with a shot that deflected off Rob Holding.
Boyhood Gunners fan Ryan, signed on loan from Brighton in January and starting in place of suspended first-choice keeper Bernd Leno, produced a fine save to deny Traore a goal on his return to the Villa side.
Martinez frustrated his former club further when the Argentine produced an excellent save to keep out Granit Xhaka’s free-kick.
Villa move up to eighth in the Premier League while Arsenal’s second successive defeat leaves them 10th.
Watkins moves into double figures
Villa climbed above Tottenham and closed to within three points of fifth spot through Watkins’ 10th Premier League goal since joining from Brentford for a club record £28m in September.
Three of those goals have been against Arsenal, the 25-year-old scoring two in Villa’s 3-0 win at Emirates Stadium in November.
After a barren run of games without a goal between November and January, there are clear signs Watkins is warming to playing at a higher level.
In netting Villa’s earliest Premier League goal since 2014, Watkins has four goals in his past five top-flight appearances after Cedric’s intended pass to Gabriel was way too short, allowing Traore to nip in and cross for the striker to score.
This was Villa’s sixth game in 18 days but there was little sign of fatigue as they worked hard to return to winning ways after being picked apart by West Ham on Wednesday.
John McGinn and Jack Grealish were both denied by Ryan while Watkins forced the new Arsenal keeper into two further saves.
Burkina Faso forward Traore brought fresh energy after being a substitute on Wednesday, while Ezri Konsa and Tyrone Mings helped limit Arsenal to three attempts on target.
During a sustained period of Arsenal pressure, Mings did well to block Emile Smith Rowe’s goal-bound attempt and Matty Cash got in the way of Bukayo Saka’s shot.
With 35 points from 21 games, Villa have equalled their tally from 2019-20 when they stayed up on the final day of the season.
This is their best return after 21 matches in a top-flight season since 2009-10 (36 points), when they finished sixth.
Arsenal once again struggled without their inspirational forward Pierre-Emerick Aubameyang, who started on the bench for the second successive game.
Gabon striker Aubameyang has been absent in recent weeks because his mother has been in ill health.
Since the captain last started for his club, the Gunners have gone out of the FA Cup and taken four points from four games in the league, where they are without a win in three.
Aubameyang came on for the final 30 minutes at Villa Park but, despite a spell of sustained pressure towards the end, Mikel Arteta’s side failed to score for the third time in five games.
After scoring against Wolves on Tuesday, Nicolas Pepe wasted two good chances while Martinez saved well from Hector Bellerin. Substitute Martin Odegaard blazed a late chance over the bar.
The Gunners, who had two players sent off at Wolves in the previous game, were unhappy when Konsa’s first-half foul on Saka did not result in a red card.
Ryan, Arsenal’s fourth keeper of the season, recovered from conceding early to produce some good saves but Arteta’s side remain anchored in mid-table after a 10th league defeat.