According to the United States Census Bureau, the town has a total area of 40.4 square miles (104.7 square kilometers), of which, 40.3 square miles (104.4 square kilometers) of it is land and 0.1 square miles (0.3 square kilometers) of it (0.30%) is water. Ashfield is located in the southwest corner of Franklin County, along the Hampshire County line. Ashfield is bordered by Buckland to the north, Conway to the east, Goshen to the south, Cummington to the southwest, Plainfield to the west, and Hawley to the northwest. Ashfield is fifteen miles west-southwest of Greenfield, thirty-five miles north-northwest of Springfield, and 105 miles west-northwest of Boston.
Ashfield lies in the eastern foothills of The Berkshires, with several high hills, including Ridge Hill, in the northern portion of town. The town is fed by several rivers and brooks, including the South River, the "western" Swift River (the "eastern" river flows out of the Quabbin Reservoir in central Massachusetts) and several prominent brooks, most of which feed into either the Deerfield River or the Connecticut River. Near the center of town, Ashfield Lake feeds into the South River, and is a recreational site. In the southwest portion of town, a small portion of the Poland Brook Wildlife Management Area crosses into town, as does a portion of the Daughters of the American Revolution State Forest.
The town is at the junction of the north-south Route 112 and the east-west Route 116, which are combined for 1.4 miles south of Ashfield Lake. The town is located approximately twelve miles west of Interstate 91, the nearest interstate to the town. The nearest bus service is in Greenfield, with the nearest small air service being Turners Falls just east of there. The nearest Amtrak service is in either Pittsfield or Springfield, and the nearest national air service is at Bradley International Airport in Windsor Locks, Connecticut.