Willow Slough flows between Woodland and Davis, passing very close to the southeast corner of Woodland.

Its South Fork begins in Esparto, adjacent to Highway 16. It crosses I-505 along the southwestern border of its Highway 16 interchange, traces the southwestern corner of the Gibson Road/County Road 93 intersection, and is joined by its North Fork just west of County Road 95. Its North Fork is much shorter and begins in Monument Hills.

After its two forks join together, Willow Slough continues southeastward. It is joined by Union School Slough and then the Moore Canal just west of County Road 98. It is then joined by Dry Slough just west of Highway 113. Just after crossing that highway, it bends northeastward (just south of Merritt), passes just southeast of the Woodland Regional Park Preserve, and continues in that direction until it meets the Yolo Bypass at County Road 25.