본래 백제의 수도 위례성(慰禮城)이라는 설이 있는데, 백제의 시조인 온조가 졸본부여(卒本扶餘)로부터 한반도에 남하하여 이곳에서 개국하고 도읍하였다고 한다.
뒤에 고구려가 취해서 사산현(蛇山縣)으로 고쳤고, 757년(경덕왕 16)에는 그대로 사산현이라 하여 백성군(白城郡 : 지금의 安城市)의 영현이 되었다. 940년(태조 23)에 직산현으로 고치고, 1018년(현종 9)천안부(天安府)의 속현이 되었다가 뒤에 감무를 두었다.
1393년(태조 2) 이곳 사람 환관(宦官) 김연(金淵)이 명나라에 들어가 사명을 완수하고 사신이 되어 오자, 이 고을을 지군사(知郡事)로 승격하였다.
그 뒤 1401년(태종 1)에 강등시켜 감무를 두었고, 1413년에 현감으로 고쳤다. 1505년(연산군 11)경기도에 예속시켰다가 중종 초에 충청도로 환원하였다. 1895년(고종 32) 승격하여 군이 되었다가 1914년 행정구역개편 때 천안군으로 병합, 1991년 천원군을 천안군으로 개칭하고, 1995년에는 천안군과 천안시가 통합되어 천안시가 되었다.
지명의 유래는 이곳의 지형이 높아 천수답(天水畓)이 많고 가뭄으로 피〔稷〕가 무성하여 피산이라 칭하던 것이 직산으로 바뀐 것이다.
조선시대에는 수원 관내의 해안지방에 월경처(越境處)로서 외야곶(外也串)을 가지고 있어 이곳을 통하여 현의 세곡(稅穀)을 경강(京江)으로 운반하였다. 차령산맥 북부의 교통요지로 염고현(鹽高峴)을 통하여 남쪽의 천안으로 연결되고, 아산ㆍ안성ㆍ죽산 등으로 연결되는 도로가 발달하였다.