Reigning champions Ireland pulled away in the final quarter to get their Six Nations defence off to a winning start.
It took Joe Schmidt’s men a long time to wear down an impressive Italian defence but tries by Conor Murray and Tommy O’Donnell sealed the victory.
Just after hooker Leonardo Ghiraldini had been sin-binned, scrum-half Murray got the first try in the 65th minute.
That was quickly followed when late replacement flanker Tommy O’Donnell ran through for his touchdown.
It was Ireland’s eighth victory in a row and represented a promising start as they attempt to retain the Six Nations for the first time.
The first half might not have been a great spectacle, with little flowing, attacking rugby, but the visitors’ strength came through in the end.
Ireland had suffered a pre-match setback when flanker Sean O’Brien pulled up with a hamstring injury.
The 27-year-old Leinster player had been selected to make first Test appearance since November 2013 because of a shoulder problem, but saw his place go to Munster man O’Donnell.
There were few opportunities for tries in the first half with the Italians looking very strong in defence.
Ireland’s scores were restricted to three Keatley penalties while Italy’s Kelly Haimona converted his first penalty attempt, which came with the final kick of the half.
After the interval, Keatley maintained his 100% penalty record after an offence in the scrum.
Ireland really took charge after Italy hooker Ghiraldini was sin-binned for repeated infringements.
Within a minute of Pascal Gauzere brandishing the yellow card, the Irish got their first try with scrum-half Murray showing his strength as he just made the line after a line-out move.
Keatley’s conversion made it 19-3 and that was soon extended by seven as late replacement O’Donnell was allowed room to break through from distance for his first try in international rugby.
Ian Madigan, just on for Keatley, added the extras for 26-3.
Home fly-half Haimona thought he had snapped up a late consolation try for Italy but it was ruled out for a fingertip knock-on by home skipper Sergio Parisse.
Italy: Masi; Sarto, Campagnaro, Morisi, McLean; Haimona, Gori; Aguero, Ghiraldini, Castrogiovanni, Furno, Biagi, Zanni, Minto, Parisse.
Replacements: Venditti for Masi (76), Allan for Campagnaro (63), De Marchi for Aguero (52), Chistolini for Castrogiovanni (68), Barbini for Zanni (46), Manici for Minto (68), Fuser for Barbini (67).
Not used: Palazzani.
Sin bin: Ghiraldini (63).
Ireland: R Kearney, Bowe, Payne, Henshaw, Zebo, Keatley, Murray, McGrath, Best, Ross, Toner, O’Connell, O’Mahony, O’Donnell, Murphy.
Replacements: Jones for Bowe (67), Madigan for Keatley (65), Boss for Murray (68), J Cronin for McGrath (67), S Cronin for Best (46), Moore for Ross (51).
Not used: Henderson, Diack.
Att: 57,700
Referee: Pascal Gauzere (France)