Everton produced a spirited defensive display to frustrate Arsenal and hold Mikel Arteta's side to a0-0 draw.
Clear-cut chances were at a real premium, with the Toffees sitting deep and challenging Arsenal to find a way through. While there was the odd glimpse of Jordan Pickford's goal, the Gunners failed to do anywhere near enough to earn more than a point.
How the game unfolded
Arsenal enjoyed the early possession but it was Everton who had the first real sight of goal. Abdoulaye Doucoure was played in down the left and found his way into the box but, with the angle narrowing, his strike was deflected away by the returning Gabriel Magalhaes.
Martin Odegaard lashed over from close range soon after, before dragging a strike from distance wide of the goal. The Gunners were operating on close to 80% possession midway through the first half but did not have their first shot on goal until the 29th minute, when another Odegaard effort was deflected away by a crowd of Everton defenders.
Pickford had to deny Gabriel Martinelli late in the first half, with Everton holding firm and continuing to frustrate their opponents heading into the interval.
The second half began in electric fashion as Pickford had to pull out an excellent low save to stop Bukayo Saka's vicious volley. Mikel Merino's header from the ensuing corner nestled calmly in the Everton stopper's gloves.
With the clock ticking down, Kai Havertz and Gabriel both failed to get the required contact on a fierce cross, while Thomas Partey had a late penalty shout waved away by both the referee and the VAR.
Jesper Lindstrom, Gabriel
Gabriel is back / Alex Pantling/GettyImages
After a handful of games out injured, Gabriel returned to Arsenal's starting lineup here, and he quickly made his presence known with a smart block to deny Doucoure.
With the way this game went, Gabriel was hardly involved after that. Most of his appearances, unsurprisingly, came from Arsenal corners, which had Everton scrambling time and time again as they did whatever it took to stop the Gunners' centre-back from connecting with the ball.
It was encouraging to see Gabriel given the full 90 minutes here, suggesting his fitness is no longer an issue.
James Tarkowski, Kai Havert
Everton threw themselves at everything / ADRIAN DENNIS/GettyImages
Everton embraced their status as the underdogs from the first whistle, parking deep and gifting Arsenal as much possession as they could want. The challenge was simple: Try score from open play.
While it was painfully unattractive to watch, it was ruthlessly effective. Everton had ten men behind the ball for nearly the entire game, limiting the space available to Saka, Odegaard and Martinelli, all three of whom struggled to get anything going with any real frequency.
Frustrations towards Sean Dyche's preferred style of play are justifiable, but would Everton have had the chance to secure a draw here had they opted for a more expansive approach? When the going is tough, sometimes this is what you need to do.
Ethan Nwaneri, Martin Odegaard
Odegaard was hauled off / Alex Pantling/GettyImages
With Arsenal chasing a breakthrough, Mikel Arteta made the bold decision to withdraw both Declan Rice and Martin Odegaard, the latter of whom seemed more likely than anyone to find a way through Everton's back line. Odegaard had combined well with Saka several times before the change, so there were a handful of raised eyebrows when the captain trudged off.
On in their places came Ethan Nwaneri and Jorginho, neither of whom did enough to justify their spots on the field ahead of their superstar teammates.
Arteta will undoubtedly be asked to explain his thought process behind withdrawing two of his most reliable passers.
READ THE LATEST PREMIER LEAGUE NEWS, RUMOURS & GOSSIP