The hosts were forced to cling on in the closing minutes with Craig Gordon making a number of excellent saves as Zagreb poured forward but in the end Commons’ goal proved to be the difference.
The Hoops took the lead in style after just six minutes when Commons left Emilio Izaguirre’s pass for Anthony Stokes before collecting the return and firing a low left-footed shot into the corner.
The visitor’s first real chance fell to striker Wilson Eduardo (19) when he rose highest to meet Ivo Pinto’s cross but the Portuguese forward was unable to keep his header down.
Wilson Eduardo came even closer just before the half-hour mark when he unleashed a rasping shot from 25 yards which rifled off Craig Gordon’s crossbar.
The home side spurned a golden chance to double their lead soon after when Zagreb goalkeeper Eduardo passed straight to Commons under pressure but the forward’s touch let him down with Stokes looming.
Wilson Eduardo continued to cause headaches for Celtic’s defence and had two quick chances in succession as first, he sent a half-volley over the bar, and then forced Gordon into a brilliant save with a rasping shot.
The Croatian champions pressed after the break and should have levelled when El Arbi Hillel Soudani picked out Wilson Eduardo in space 12 yards out but Gordon produced a terrific reflex save to deny him.
Zagreb were starting to dominate possession as they pushed for the equaliser and Marcelo Brozovic forced Gordon to make another good save when he engineered space on the edge of the box and fired a low shot towards the bottom corner.
Zoudani went close twice in quick succession as he stepped inside Virgil van Dijk in the Celtic box before forcing Gordon into a smart save and moments later he fired one over the bar after creating space with a clever turn.
The closing minutes were nervy for the home fans as the Croatians surged forward but Celtic defended heroically and held on to take all three points and go top of Group D.