According to the United States Census Bureau, the town has a total area of , of which, is land and is water [REF].
The town lies mostly on the north bank of the Skagit River, and is split into half by the lower Baker River (a tributary to the Skagit River).