According to the United States Census Bureau, the town has a total area of , of which is land and (2.15%) is water.
The southern end of Dracut is on the Merrimack River, and the town is bisected by Beaver Brook.