Oaxaca
Mexico's food-and-craft heartland, with a surf coast to match
Give Oaxaca eight days: four for the capital and the valleys, four on the coast. It is the state we would send a first-timer who wants Mexico beyond the resorts, and it is the one people most often come back to. The catch is that it is really two trips stapled together — a highland food-and-craft trip and a Pacific surf trip, separated by a mountain road that eats a day — and planning it as one state is how people end up spending their holiday in a van.
This is where a lot of what outsiders picture as “Mexican culture” actually comes from: the seven moles, tlayudas the size of a bicycle wheel, mezcal poured straight off the still, the black clay of San Bartolo, the alebrije woodcarvings of Arrazola. Come hungry.
Three Oaxacas, and why that matters for planning
- Oaxaca City and the Centro Histórico. Walkable, low-rise, built around the zócalo and Santo Domingo. Mercado 20 de Noviembre (the smoke-filled meat hall) and Mercado Benito Juárez anchor most days here. Three nights minimum.
- The Central Valleys, a ring of villages within an hour of the city, each known for one thing: Monte Albán, the Zapotec capital on a levelled mountaintop, 20 minutes out; Mitla for its stone mosaics; Teotitlán del Valle for wool rugs; Santa María del Tule for a 2,000-year-old cypress; and Hierve el Agua, the mineral springs and petrified “waterfall”.
- The Pacific coast, six to ten hours away by road: Puerto Escondido for surf, Mazunte and Zipolite for hammocks and turtles, Huatulco for calm family bays.
The mountain road between the two halves is the single biggest planning decision on any Oaxaca trip. Most people fly the 40-minute hop instead, and we would too.
Is Oaxaca safe?
Yes — it is one of the more relaxed states in the country for a visitor, and crime is rarely the story here. In the capital, use ordinary after-dark city sense: stay in the lit centro at night, take a registered taxi or DiDi back from dinner, keep bags close in packed markets.
The ocean is the actual hazard, not people. Zicatela and several open Pacific beaches carry serious rip currents and a shore break that breaks boards and collarbones. Take the surf flags seriously, swim where locals swim, and do not read a calm-looking beach as a safe one. One more thing nobody warns you about: teachers’ union and community roadblocks (bloqueos) close highways for a day at a time with little notice, so keep buffer before a flight. Our is Mexico safe guide has the national picture.
When to go, and the one month to skip
October through March is dry and clear, and that is when we would go. May is the hot, hazy build-up to the rains and the month to avoid. June through September is green with reliable afternoon downpours, and mornings usually stay clear, so it still works if you plan around the rain.
Time it to a festival if you can. Día de Muertos (late October to November 2) is the capital at its most intense, with cemetery vigils and comparsas in the streets. The Guelaguetza, the Indigenous dance festival, fills the last two Mondays of July. Noche de Rábanos takes the zócalo on December 23. All three double room rates and need booking months out; see best time to visit.
How many days do you need in Oaxaca?
Eight, split four and four. Four nights in the Centro Histórico to start. Eat through both markets, take a mezcal-palenque day out toward Santiago Matatlán, and pair Monte Albán at opening with Mitla or Hierve el Agua in the afternoon. A market lunch runs under 100 MXN and a shared valley tour 500–900 MXN per person (both mid-2026).
Then fly to Puerto Escondido: 40 minutes, against six to ten hours of curves by road. Pick your beach by mood — Puerto for surf and nightlife, Mazunte and Zipolite for a slower scene, Huatulco for calm bays. Getting around and costs and money cover the logistics between the two halves.
Nature
Getting there
Fly into Oaxaca City (OAX) for the capital and valleys, or Puerto Escondido (PXM) for the coast. The mountain road between them takes 6–10 hours of curves; most people fly the 40-minute hop instead.