According to the United States Census Bureau, the town has a total area of 11.8 square miles (30.7 km²), of which 11.5 square miles (29.8 km²) is land and 0.3 square mile (0.9 km²) (2.87%) is water.
Bolton and Stow on the north, Marlborough on the south, Sudbury on the east, and Berlin on the west.