According to the United States Census Bureau, the town has a total area of , of which is land and , or 23.69%, is water [REF].
New Salem lies at the southeastern corner of Franklin Valley, with its lands extending southward between Hampshire County and Worcester County.