Selma is located in Johnston County southeast of Raleigh, between Wilson and Fayetteville along US Highway 301 near Smithfield, Kenly, and the Neuse River.
The town began as a station on the North Carolina Railroad and in 1886 the Atlantic Coast Line Railroad built a rail line through town. The recently restored, Selma Union Depot (circa 1924) was built where the tracks intersect by the two railroad companies and is again serving passengers riding Amtrak's daily Carolinian between New York City and Charlotte and Amtrak's daily Palmetto that runs between New York City and Florida.
Selma is part of the Raleigh-Durham-Chapel Hill metro area.