동경 126°28′, 북위 34°95′에 위치한다. 무안군 운남면사무소에서 서쪽으로 5.4㎞, 신안군청에서 북서쪽으로 14.6㎞ 지점에 있다. 면적은 6.59㎢, 해안선 길이는 14.5㎞이다. 주변의 섬으로는 선도( 신안군 지도읍 선도리), 마산도와 매화도(신안군 압해읍 매화리), 압해도(신안군 압해읍)로 둘러 쌓여 있다. 무안군 운남면에 위치한 신월항으로부터 고이도에 위치한 고이항을 통해 섬에 이를 수 있다.
백제시대에는 아차산현에 속하였다가 757년(경덕왕 16)에 무안군에 편입되었다. 고려시대에는 물량군으로 개칭되었다가 1172년(명종 2)에 무안현에 속하였다. 무안현은 1895년(고종 32)에 무안군이 되었고, 1969년에 무안군에서 신안군이 분리됨에 따라 신안군 압해면 소속이 되었다.
고려 태조의 숙부인 왕망이 왕의 자리를 탐하여 이곳에 성을 쌓고 살았다 하여 ‘고(古)’ 자를 따고 섬의 모양이 귀와 같다 하여 ‘이(耳)’ 자를 따서 고이도라 부르게 되었다고 전한다. 또 섬의 형태가 고양이(고이)처럼 생겼기 때문에 고이도가 되었다고도 한다. 왕망이 고려 왕실의 전복을 꾀하여 왕이라 자칭하고 살았던 섬으로, 지금도 1㎞가 넘는 성벽과 집터가 남아 있다. 왕이 살았다 하여 높은 구릉지를 왕산이라 부르고, 정월 보름날이면 이곳에서 제를 지낸다. 광복 전까지는 왕도(王島)라고도 불리었다.
지질은 능주층군, 산성화산암류, 편마암류로 구성되어 있다. 섬 전체는 완만한 구릉지(최고봉 65.3m)이며, 해안 주위의 갯벌은 간척 사업을 통해 염전이나 농경지로 변하였다. 최저 기온은 –1.9℃, 최고 기온은 29.1℃, 연강수량은 1,072.5㎜(2021년 기준)이다.
인구는 2021년 기준 217명(남 124명, 여93명)이고 세대 수는 130세대이다. 취락은 사동 · 고장 · 대촌 · 칠동 · 진번마을에 집중 분포하며, 진번 마을은 섬의 중심지로 고이항과 압해읍사무소 고이도출장소가 위치해 있다. 압해초등학교 고이분교장은 1946년 6월 7일 개교하여 72년을 유지해 오다가 학생수 감축으로 2016년 3월 1일 휴교하였고 2018년 8월 31일 폐교되었다.
주산업은 농업으로 전체 가구의 80% 정도(115가구)가 전업 농가에 해당한다. 토지이용 현황은 논 0.61㎢, 밭 1.39㎢, 임야 3.31㎢이다. 주요 농산물은 쌀 · 감자이고, 그 밖에 보리 · 콩 · 마늘 등이 산출된다. 수산물로는 바지락 · 숭어 · 낙지 등이 주로 잡히고, 김 양식도 한다.