The hosts had Chelsea on the ropes from the off and took the lead inside three minutes after a long throw caused confusion amongst the Chelsea rearguard and the ball fell to Alex Teixeira, who took a touch before calmly slotting past Petr Cech.
Shakhtar then doubled their advantage shortly after the break when Eden Hazard, on for the injured Frank Lampard, was dispossessed in the centre circle, allowing Luiz Adriano to surge forward and pick out Fernandinho, who fired into the bottom-left corner.
Oscar then grabbed a late consolation for Di Matteo’s men but the Blues were unable to salvage a point, leaving them second in Group E.
“Shakhtar are a very good side with a good track record at home against English teams in particular, but in general as well, and the early goal helped them,” said Di Matteo.
“It is always difficult when that happens in an important game, and it unsettled us a little in the first half, we found it hard to get into our rhythm.
“I was always confident we were going to score a goal and we came out better in the second half and started to control the game a little more, but then they caught us in possession on halfway and then we were chasing two goals and the game becomes very open.”
The Chelsea boss, whose side host Manchester United in the Premier League this weekend, admitted the Blues must now win their two home games if they are to secure their passage into the round of 16.
He added: “We need to win our two home games remaining for sure and the consolation tonight is Juventus’s draw in Denmark which shows the Champions League is a very competitive competition.”
MORE: Man United latest news
MORE: Arsenal latest news
MORE: Chelsea latest news
MORE: Liverpool latest news