섬에 소머리처럼 생긴 큰 돌이 있어 ‘소섬’ 또는 ‘쇠이’라고 부르다가 한자로 바뀌며 우도(牛島)가 되었다고 한다. 한편 섬에 대나무가 많이 자생하여 임진왜란 때 화살을 만들어 나라에 바치면서 우죽도(牛竹島)라고도 불렀으나 이후 뒤에 죽(竹)자를 없애고 다시 우도라 하여 현재 명칭에 이르렀다고 전해지기도 한다. 이와 다르게, 현재의 고흥군 우도는 『동여도(東輿圖)』의 우기도(혹은 우죽도)가 아니라 그 아래에 있는 ‘고도’라는 주장도 있다.
우도는 주1 127°19′, 주2 34°19′에 위치하며, 득량만(得糧灣)의 내측에 있다. 남양면 남양리에서 서쪽으로 1.3㎞ 지점에 있다. 섬의 면적은 0.46㎢이고, 주3 길이는 3.3㎞이다. 섬의 동쪽과 남양면 해안을 연결하는 시멘트 도로가 있는데, 하루 2번 주4 때에만 통행이 가능하다. 섬의 북서쪽 제1우도는 주5로 연결되어 있다. 주변 무인도는 북쪽의 오리섬, 꼬리섬, 상 · 중 · 하구룡도, 행계섬과 북서쪽의 각도섬, 북동쪽의 해섬이 위치하고 있다.
지질은 대부분 주6 우도반려암으로 구성되며, 일부 중생대 두원층이 분포한다. 중앙은 최고 높이 107.6m의 봉들산이 있으며 경사가 비교적 완만한 주7 산지로 이루어져 있다. 섬은 둥근 형상이며, 해안선은 단조롭다. 해안은 사질 해안(沙質海岸)이 많고 주위에 간석지가 넓게 발달해 있다. 1월 평균 기온은 4.0℃, 8월 평균 기온은 27.0℃, 연 강수량은 1,520㎜이다.