이곳은 정해(貞海)·여미(餘美) 두 현을 합한 지명이다. 정해현은 고려 태조 때 몽웅현(夢熊縣)의 아전 한씨(韓氏)가 큰 공로가 있어 대광(大匡)의 작호를 내리고 홍주(洪州)의 속현이었던 고구현(高丘縣)을 분할하여 정해현으로 만들어서 그의 본관(本貫)으로 삼았다.
1018년(현종 9) 운주(運州)에 붙였다가 뒤에 감무를 두었다. 여미현은 본래 백제의 여촌현(餘村縣)이었는데, 757년(경덕왕 16) 여읍(餘邑)으로 고쳐 혜성군(槥城郡)의 속현으로 하였다. 고려 초에 다시 여미라 고쳤으며, 1018년 운주에 붙였고, 1106년(예종 1)에 감무를 두었다.
1407년(태종 7) 정해·여미 두 현을 합하여 해미로 고치고 정해를 그 치소로 삼았고, 1413년 현감을 두었다. 1895년(고종 32) 군(郡)이 되었다가 1914년 행정구역개편 때 서산군에 병합, 1917년 해미면이 되었다. 1995년에는 서산군과 서산시가 통합되어 서산시가 되었다.
해미읍성은 1418년(태종 18) 충청도에 설치된 두개의 병마절도사영(兵馬節度使營) 중 하나로 1491년(성종 22)에 완성되었으며, 1963년 사적으로 지정되었다. 1651년(효종 2) 병마절도사영이 청주로 옮겨졌고 해미영(海美營)이 설치되었는데 이는 충청도의 5개영 중 하나로 호서좌영(湖西左營)이라 칭하였다.
염조포(鹽祖浦) 부근에 안회산(安回山) 봉수가 있어 서산의 북산(北山) 봉수를 받아 면천(沔川)의 창택산(倉宅山) 봉수와 연결되었다.