동경 126°42′, 북위 34°24′에 위치하며, 완도읍에서 10.3㎞, 군외면에서 1.8㎞ 떨어져 있다. 완도군 군외면 영풍리 북쪽과 해남군 북일면 내동리 남쪽 사이에 있는 섬이다. 면적은 2.90㎢이고, 해안선 길이는 6.5㎞이다.
신라시대 장보고(張保皐)가 군마를 길렀다고 하여 고마도라 부르게 되었다고 전한다. 임진왜란 때 마도진이 설치되었으나 선박의 입출항이 불편하여, 후에 강진군 마량으로 옮겨졌다.
지질은 능주층군이 대부분이다. 섬의 동서 양쪽 끝에 높이 100m 내외의 산지가 있으나, 중앙부는 낮은 구릉지로 이루어져 경작지가 형성되어 있다. 해안은 사빈해안과 암석해안이 모두 나타나는데, 동쪽과 서쪽의 산지 주변은 암석해안이 발달해 있고, 남쪽에는 사빈해안이 분포한다. 특히 썰물 때에는 간석지를 통해 육지와 연결된다.
연평균기온은 14.3℃이고, 1월 평균기온은 1.9℃, 8월 평균기온은 25.1℃이며, 연강수량은 1,282㎜이다.
2009년 기준으로 인구는 131명(남 73명, 여 58명)이 거주하고 있으며, 세대수는 78세대이다. 취락은 남쪽 해안 중앙부에 집중하여 분포한다. 조선 숙종 때 김씨·이씨·조씨 등이 입도하여 마을이 형성되었다.
토지이용 현황은 논 0.02㎢, 밭 0.38㎢, 임야 2.26㎢이다. 주산업은 농업과 농어 겸업이다. 주요 농산물은 고구마이고, 보리와 쌀·콩 등이 약간 생산된다. 주된 어획물은 농어·장어·낙지·숭어·감성돔 등이고, 바지락·굴·김·미역 등을 양식한다. 미역 가공업이 발달하였다. 군외면 불목리 선착장에서 나룻배가 운항된다.