According to the United States Census Bureau, the town has a total area of , of which is land and , or 0.62%, 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. The northern outlying section of town includes the historic neighborhoods of Beldingville and Baptist Corner. Ashfield is west-southwest of Greenfield, north-northwest of Springfield, and west-northwest of Boston.