A rousing performance by the Edinburgh club overwhelmed their Glasgow guests, who fell to their first domestic defeat since manager Brendan Rodgers took charge in May 2016.
It was the first time since April 1972 that Hearts had scored four against Celtic, and the 4-0 scoreline was their biggest league victory in this fixture since 1895. Cochrane, the 16-year-old midfielder, claimed his first senior goal, while Milinkovic finished the afternoon celebrating his first two strikes in maroon.
Celtic had previously been all-conquering under Rodgers but they looked a shadow of themselves in Gorgie as Hearts swamped them. Without Arnaud Djoum and Jamie Walker through injury, plus the suspended John Souttar, the hosts were severely understrength facing the Ladbrokes Premiership champions.
Manager Craig Levein made seven changes following the midweek win over Dundee as Jamie Brandon, Michael Smith, Ross Callachan, Don Cowie, Cochrane, Milinkovic and Lafferty all returned to the starting line-up. Rodgers made four alterations from his team’s victory over Hamilton by reinstating Jozo Simunovic, Mikael Lustig, Kieran Tierney and Leigh Griffiths.
Hearts started on the front foot as per Levein’s wish. Callachan’s rising drive at goal was a sign of their intent, as was Christophe Berra’s header from a corner. Griffiths miscued an opportunity at the opposite end, where Celtic’s pace was an obvious threat, and the Scotland striker found the side-netting with his next attempt. Hearts continued probing and were rewarded with the opening goal on 26 minutes.
Cowie’s low ball in from the right was calmly controlled by Cochrane before a crisp left-footed drive planted the ball beyond Craig Gordon into the net. Tynecastle duly erupted as the teenager ran off to celebrate his maiden goal at first-team level. He almost created a second moments later. Milinkovic was sent through on goal by Cochrane’s pass and Gordon had to be alert to push the Frenchman’s shot for a corner.
Hearts didn’t have to wait too long to double their advantage. Milinkovic held possession just long enough for Lafferty to find space to his right. He fed the forward, who took a touch and strode forward to dispatch an accurate right-footed finish across Gordon and in off the far post.
It had been a powerful and impassioned first 45 minutes by the hosts and they could not afford to relent. Celtic had failed to find any real rhythm and, three minutes into the second half, their suspect-looking defence was pierced again. Connor Randall’s long hopeful ball forward was woefully misjudged by Simunovic, and Milinkovic took full advantage to dribble past Gordon and score.
Those in the hoops looked punch-drunk but were determined to fight back. Moussa Dembele and Stuart Armstrong had been introduced for Tierney and Olivier Ntcham during the interval, creating a 3-5-2 formation with Dembele joining Griffiths in attack. The former Hibs player stung the palm of Hearts goalkeeper Jon McLaughlin on 57 minutes with a 20-yard effort.
Hearts’ Prince Buaben and Lafferty were forced off with knocks and replaced by 16-year-old Anthony McDonald and striker Cole Stockton respectively. That might have weakened the home side but they secured victory via the penalty spot with 14 minutes remaining.
Milinkovic stroked another weighted ball through for Callachan, who actually miscontrolled entering the penalty area but was then impeded as he tried to run past Gordon. Referee Willie Collum pointed instantly to the spot, and Milinkovic stepped up to claim his second goal of the afternoon.
With that, the game was over. Celtic were finally defeated as Hearts’ unbeaten run increased to six matches.
Hearts (4-2-3-1): McLaughlin; Randall, M Smith, Berra, Brandon; Callachan, Buaben; Cowie, Cochrane, Milinkovic; Lafferty.
67: McDonald for Buaben
72: Stockton for Lafferty
85: Grzelak for Callachan
Unused subs: Hamilton, Hughes, Keena, Goncalves.
Celtic (4-2-3-1): Gordon; Lustig, Simunovic, Boyata, Tierney; Brown, Ntcham; Forrest, McGregor, Sinclair; Griffiths.
46: Dembele for Ntcham
46: Armstrong for Tierney
67: Edouard for McGregor
Unused subs: De Vries, Ajer, Hayes, Kouassi.
Referee: Willie Collum.