The town is located on a hill on the road linking Marina di Camerota to Policastro Bussentino.
The municipality counts part of the coastal area of Porto Infreschi, in which is located the Sanctuary of Pietrasanta.
It borders with the municipalities of Camerota, Roccagloriosa, Santa Marina and Torre Orsaia.
San Giovanni a Piro counts two hamlets (frazioni), Bosco and Scario.
Media related to San Giovanni a Piro at Wikimedia Commons