동경 126°34′, 북위 34°17′에 위치한다. 해남군 송지면 송호리 남단의 땅끝마을에서 남쪽으로 2㎞, 완도읍에서 서쪽으로 17.1㎞ 지점에 있다. 동쪽에는 백일도와 동화도가 있다. 면적은 1.58㎢이고, 해안선 길이는 7.9㎞이다.
해안에 검은 모래가 널리 깔려 있어서 흑일도라 부른다. 또는 해가 지는 서쪽에 위치하기 때문에 해가 뜨는 백일도와 대비되어 흑일도라 부르게 되었다는 설도 있다.
지질은 주로 편마상화강암으로 구성된다. 섬은동서 방향으로 뻗어 있는데, 전체가 산지(최고 높이 184m)로 이루어져 있다. 남서쪽 일부 해안에 약간의 만입(灣入)이 있을 뿐 해안선은 단조로운 편이다. 북쪽에는 사빈해안(沙濱海岸)이 일부 형성되어 있다. 1월 평균기온은 1.9℃, 8월 평균기온은 25.1℃, 연강수량은 1,282㎜이다.
2009년 기준으로 인구는 69명(남 29명, 여 40명)이 거주하고 있으며, 세대수는 43세대이다. 취락과 농경지는 북동쪽 해안의 완경사지에 집중 분포한다. 토지이용 현황은 논은 없고 밭 0.17㎢, 임야 1.38㎢이다. 주민들은 대부분 농업과 어업을 겸하고 있다.
농산물로는 쌀보리·콩·고구마·마늘·고추 등이 생산된다. 근해에서 멸치·오징어·주꾸미·톳 등이 어획되며, 김과 굴 등이 양식된다. 광산물로는 규사가 생산된다. 교통은 해남 송지면 갈두선착장에서 정기여객선이 운항된다.