Hannibal is located at 39°42'29" North, 91°21'29" West (39.708056, -91.358056).
According to the United States Census Bureau, the city has a total area of 15.08 mi2 (39.06 km2). 14.61 mi2 (37.84 km2) of it is land and 0.47 mi2 (1.22 km2) of it is covered by water. The total area is 3.13% water.
Hannibal is located in the Central Standard Time (CST) timezone, GMT-06:00. It observes Daylight Saving Time (DST).