At Signal Iduna Park, Borussia Dortmund edged bottom side 1. FC Heidenheim 3–2 in a tense Bundesliga clash that was far more complicated than the league table suggested. On an evening shaped by set-piece quality and penalty drama, Niko Kovac’s side had to come from behind in the second half, with Serhou Guirassy’s double – including a VAR-backed spot-kick – proving decisive. The victory keeps Dortmund firmly in the title conversation near the top of the table, while Heidenheim’s brave effort ultimately leaves them rooted to the bottom and deeper in relegation trouble.
First-half analysis
The first half was tight and, for long spells, cagey. The opening notable flashpoint arrived on 40', when Mathias Honsak went into the referee’s book for a foul, underlining Heidenheim’s willingness to disrupt Dortmund’s rhythm.
Dortmund eventually broke the deadlock on 44'. From the back line, Waldemar Anton stepped up with the opener, giving the hosts a late first-half lead and appearing to tilt the match towards the favourites just before the interval. But Heidenheim, despite their position at the foot of the table, refused to fold.
Only a minute later, on 45', Julian Niehues struck back for Frank Schmidt’s side, levelling the match at 1–1 before the break. With both goals coming in the final moments of the half, the interval arrived with Dortmund frustrated and Heidenheim buoyed by their resilience and clinical response.
Second half & tactical shifts
Both coaches moved quickly once the teams re-emerged. At 46', Kovac made a defensive like-for-like change, withdrawing Filippo Mané and sending on Niklas Süle, perhaps seeking more stability at the back. Schmidt responded simultaneously, taking off the already-booked Honsak and introducing Arijon Ibrahimović, a midfield reshuffle that suggested a desire to retain energy and avoid a second yellow.
Heidenheim struck first after the restart. On 48', Niehues grabbed his second of the evening, this time assisted by Eren Dinkçi, turning the match on its head and putting the visitors 2–1 up. Dortmund’s response was swift and assertive. Kovac reacted on 58' with a clear attacking tilt: wing-back Yan Couto made way for forward Maximilian Beier, and Jobe Bellingham was replaced by Carney Chukwuemeka in midfield. The double change underlined Dortmund’s urgency to add more threat in the final third.
The game’s key turning point arrived on 64', when Niehues, Heidenheim’s two-goal hero, was booked for a foul, a sign of the increasing strain on the visitors. Two minutes later, VAR intervened: at 66', a review confirmed a penalty for Dortmund, with Julian Brandt at the heart of the incident. On 68', Guirassy converted from the spot, restoring parity at 2–2.
Kovac doubled down on attack on 69', replacing Karim Adeyemi with Fábio Silva, adding fresh legs up front. Schmidt, by contrast, began to rotate his tiring side: on 70', he withdrew Niehues, sending on Jan Schöppner, just as Guirassy struck again. Also on 70', the striker finished a move assisted by Beier, completing the turnaround and putting Dortmund 3–2 ahead.
Heidenheim threw on a triple substitution on 80' – Omar Traoré off for Stefan Schimmer, Dinkçi off for Mikkel Kaufmann, and Marvin Pieringer off for Sirlord Conteh – a bold, attack-heavy reshuffle from Schmidt in search of an equaliser. Kovac’s final move came on 90+3', protecting his match-winner by taking off Guirassy for Salih Özcan to shore up midfield. Deep into stoppage time, at 90+8', goalkeeper Gregor Kobel was booked for time wasting as Dortmund managed the closing stages to see out the win.
Statistical deep dive
Dortmund controlled 65% of the ball, with 479 total passes and an 83% completion rate, reflecting their territorial and technical superiority. Heidenheim, with 35% possession and 258 passes at 71% accuracy, were forced to play more reactively but still found ways to threaten.
In attack, Dortmund’s 19 total shots to Heidenheim’s 12, plus a 5–3 edge in shots on target, underline their sustained pressure. The expected goals numbers – 3.32 for Dortmund versus 2.26 for Heidenheim – mirror the 3–2 scoreline and suggest the hosts broadly matched the quality of chances they created, while the visitors were impressively efficient through Niehues.
Discipline was evenly matched, with both sides committing 11 fouls and collecting two yellow cards apiece. The bookings for Honsak and Niehues highlighted Heidenheim’s combative approach, while Anton’s foul and Kobel’s time-wasting card reflected Dortmund’s own intensity and late-game game management.
Standings & implications
The result keeps Borussia Dortmund second in the Bundesliga on 45 points, with a strong goal difference of +22 (41 scored, 19 conceded) after 20 matches. Their unbeaten home record in the league this season (8 wins, 2 draws, 0 defeats) remains intact and reinforces their Champions League credentials and title ambitions.
For Heidenheim, the narrow defeat leaves them 18th with 13 points and a worrying goal difference of -26 (19 for, 45 against). With just three wins in 20 games and a form line of LLDLD, Schmidt’s side stay firmly in the relegation zone, needing a rapid turnaround to avoid an immediate drop.





