According to the United States Census Bureau, the town has a total area of , of which is land and (5.40%) is water.
Pelham is the northeastern-most town in Hampshire County, bordering Franklin County to the north and east.