Empoli escaped relegation with a last-gasp M’Baye Niang goal to beat Roma, sending Frosinone down to Serie B, in another extraordinary Davide Nicola comeback story.

The Tuscans knew they had no choice but to win to secure safety, or draw and see what happened in Frosinone-Udinese.

Alberto Grassi began his three-match ban for insulting the officials after a chaotic last-gasp draw with Udinese, with Alberto Cerri and Tyronne Ebuehi injured. Roma knew the sixth Champions League spot was now impossible. Romelu Lukaku and Leandro Paredes were suspended with Leonardo Spinazzola out of action, but Paulo Dybala returned.

See how it unfolded on the Liveblog.

Nicola Zalewski flashed a ball across the face of goal just beyond Tammy Abraham, then Dybala’s toe-poke finish didn’t quite come off.

However, it was Empoli who took the lead on the counter-attack, as a long ball was floated over the top for Emanuel Gyasi, who rolled across for Matteo Cancellieri, giving him time to take a touch and then sweep in from 10 yards.

Roma had the ball in the net on 19 minutes when Dybala’s free kick forced a series of Elia Caprile saves on Tammy Abraham and Bryan Cristante, but it was disallowed for offside.

Cancellieri forced a tricky save from Mile Svilar at the near post, then Caprile was almost surprised by an awkward bounce on Zalewski’s effort, helped by Ardian Ismajli’s clearance.

Roma did equalise in first half stoppages when Angelino was allowed to get down the left and stand up a cross for the Houssem Aouar header.

Youssef Maleh’s deflection on the Zeki Celik cross almost stunned Caprile, then Ismajli intercepted the Celik roll across before Abraham could tap in.

M’Baye Niang came on for the second half and had a huge chance when firing just wide on a ball over the top, but Zalewski thumped the outside of the near post with a cross-shot.

Svilar stayed on his feet and was not surprised by the Cancellieri lob, but Empoli came so close when Razvan Marin’s right-foot screamer from distance dipped to thump the crossbar on 69 minutes.

Roma had the ball in the net on 84 minutes, but Stephan El Shaarawy had wandered offside. Empoli also pushed, as Cancellieri nodded wide from a chaotic corner.

Deep into stoppages, Cancellieri got down the right and rolled across for Niang to drill into the near bottom corner from 12 yards, a goal that completely transformed everything. Suddenly, Frosinone were the ones going down to Serie B, with Empoli and Udinese safe.

Empoli 2-1 Roma

Cancellieri 13 (E), Aouar 45 (R), Niang 93 (E)

26-05-2024 19:45
MatchDay 38

Player statistic

1st half
Emmanuel Gyasi Yellow card 2'    
Matteo Cancellieri
(Assist: Emmanuel Gyasi)
Goal 13'    
Mattia Destro Yellow card 34'    
    45+1' Goal Houssem Aouar
(Assist: Angeliño)
2nd half
Răzvan Marin Yellow card 81'    
M’Baye Niang Yellow card 90'    
M’Baye Niang
(Assist: Matteo Cancellieri)
Goal 90+3'    
    90' Yellow card João Costa

Match statistic

33
Possession %
67
17
Total shots
15
7
Shots on target
3
5
Shots off target
8
5
Blocked shots
4
4
Corners
5
3
Offsides
2
18
Fouls
12
EMP
ROM

Starting lineups

25
Goalkeeper
34
Defender
19
67'
13
Defender
33
18
Midfielder
30
Midfielder
55'
29
Midfielder
77'
11
Attacker
46'
20
23
Attacker
46'
99
Goalkeeper
Defender
5
Defender
23
Defender
19
Defender
4
Midfielder
52
Midfielder
22
Midfielder
70'
59
Midfielder
79'
21
Attacker
88'
9
Attacker
70'

Substitutes

27
Midfielder
99
Goalkeeper
3
8
Midfielder
1
Goalkeeper
12
Goalkeeper
7
Attacker
2
Defender
4
46'
10
Attacker
46'
21
Midfielder
55'
9
Attacker
67'
28
77'
6
Defender
1
Goalkeeper
2
Defender
63
Goalkeeper
Midfielder
43
14
Defender
61
Midfielder
60
Midfielder
3
Defender
7
Midfielder
70'
17
Attacker
70'
92
79'
67
Attacker
88'