福岡県南部、筑後平野の西南端にあり、北は大川市、大木町、筑後市、東はみやま市に接し、南は有明海に面しています。
また、本市の大部分は、古くから開拓・干拓された大小規模の干拓地が魚鱗状に広がる海面干拓地帯です。標高は0〜約6mの平坦な低地となっており、0°から3°の緩やかな傾斜で有明海に向かって広がっています。
有明海は干満差日本一で大潮時には6mに達し、干潮時には広大な干潟が現れます。
地層は砂、粘土、礫(れき)からなる沖積層で、表土以下10数メートルには、極めて軟弱で含水比の高い「有明粘土層」が分布しています。