Harry Cochrane opened the scoring at Tynecastle on 26 minutes, with Kyle Lafferty adding a second ten minutes before half time. Manuel Milinkovic scored shortly after the restart.
Milinkovic added a second from the penalty spot on 76 minutes.
Hearts: McLaughlin, Randall, Brandon, Berra, Smith, Cowie, Cochrane, Buaben, Milinkovic, Callachan, Lafferty
Subs: Hamilton, Hughes, Grzelak, McDonald, Stockton, Keena, Isma
Celtic: Gordon, Lustig, Simunovic, Boyata, Tierney, Ntcham, Brown, McGregor, Forrest, Sinclair, Griffiths
Subs: de Vries, Armstrong, Ajer, Dembele, Hayes, Edouard, Kouassi