The home side dominated from the first whistle as Royals goalkeeper Adam Federici was forced to tip away Rickie Lambert's low drive.
Federici had to pull off a smart save soon after when Adam Llalana's shot had taken a deflection through a crowd of bodies in the area.
Llalana had two more efforts before 15 minutes had even been played, but Federici was again equal to them.
Having had barely a sniff on goal, Reading took the lead with 19 minutes gone as Roberts powered in a header from six yards following Jimmy Kebe's cross.
The Saints nearly drew themselves level before the end of the half, but Jos Hooiveld could only put his free header wide from a corner before Lambert floated his header over.