According to the United States Census Bureau, the township has a total area of 16.5 square miles (42.8 km2), all land.
Mahantango Creek and its west branch form the boundary with Snyder County.
The Susquehanna River forms the eastern boundary with Northumberland County.
Routes 11 and 15 run concurrently on a four-lane divided highway and cross the eastern end of the township, leading north to Selinsgrove and south to Liverpool.
Pennsylvania Route 235 crosses the southwestern corner of the township, leading south to Liverpool and west to East Salem.
12.4% of all households were made up of individuals, and 5.0% had someone living alone who was 65 years of age or older.