Having taken his tally to 499 before getting sent off in the midweek Coppa Italia exit to Inter, Ibrahimovic failed to convert a first-half penalty awarded for a foul on Rafael Leao.
However, Ante Rebic scored from the rebound as the Rossoneri bounced back from successive losses - including last weekend’s 3-0 humbling at home to Atalanta - to remain the pacesetters in the Serie A title race.
Franck Kessie succeeded where Ibrahimovic failed in the second half to double the lead, punishing Adama Soumaoro's handball as he scored from 12 yards.
Yet Milan did not have it all their own way, Andrea Poli converting fellow substitute Andreas Skov Olsen's cut-back cross to finally beat Gianluigi Donnarumma, who had made fine one-on-one saves from Nicola Sansone and Nicolas Dominguez before the break.
Lukasz Skorupski was equally impressive in goal for Bologna, including producing a stunning double save to deny Ibrahimovic twice in a hurry in the 23rd minute.
The Swede was frustrated again by the keeper from the spot, though there was nothing Skorupski could do when Rebic reacted quickly to steer in the rebound for just his second goal of the season.