Danville is located west of St. Johnsbury, Vermont. Other towns bordering Danville are Barnet to the southeast, Peacham to the south, Cabot and Walden to the west, Stannard to the northwest, Wheelock to the north, and Lyndon to the northeast, touching Danville at a single corner. According to the United States Census Bureau, the town has a total area of , of which is land and , or 0.67%, is water. The main village in town (not separately incorporated) comprises the Danville CDP, with an area of , all land.