La mayor parte del municipio se localiza dentro de los Llanos de San Juan, sólo los cerros del noroeste se consideran como parte del declive austral de la Sierra de Puebla. Tiene una superficie de 239.67 kilómetros cuadrados, que lo ubica en el lugar 30º con respecto a los demás municipios del Estado.Colinda al norte con Libres y Tepeyahualco, al sur con San Salvador el Seco, al este con San Nicolás Buenos Aires, y al oeste con San José Chiapa y el Estado de Tlaxcala.