동경 125°59′, 북위 34°16′에 위치한다. 하조도(下鳥島)에서 서쪽으로 3㎞, 진도 팽목항에서 남동쪽으로 16.8㎞ 지점에 있다. 북쪽에는 관사도(觀沙島), 남쪽에는 대마도(大馬島)가 있다. 면적은 0.73㎢이고, 해안선 길이는 3.2㎞이다. 다도해해상국립공원으로 지정되어 있다.
섬의 형상이 말을 닮아 유래한 지명이며, 남쪽의 대마도보다 작은 섬이어서 소마도라고 부른다. 조선시대에는 군마를 길렀다고 한다.
지질은 대부분 산성화산암류로 이루어져 있다. 서쪽에 구릉성산지인 소마산(小馬山, 121m)이 있으며, 동쪽 사면은 경사가 완만하여 산록부에 농경지와 취락이 분포한다. 해안선은 드나듦이 적어 비교적 단조롭다. 1월 평균기온은 -0.6℃, 8월 평균기온은 22.4℃, 연강수량은 1,019㎜이다.
2010년 기준으로 인구는 56명(남 25명, 여 31명)이 거주하고 있으며, 세대수는 32세대이다. 취락은 섬의 동중부에 있는 구릉지에 모여 있다. 토지이용 현황은 논 0.06㎢, 밭 0.18㎢, 임야 0.45㎢이다. 농산물로는 감자·고구마·마늘·유채·보리 등이 생산된다. 주요 수산물은 멸치·장어·병어 등이고, 김·미역·톳 양식도 행해지고 있다. 돌김과 톳이 섬의 특산물이다. 교통은 진도의 팽목항 선착장에서 정기여객선이 운항된다.