The Monarch Butterfly Reserves are in Michoacán of Mexico.
Millions of monarch butterflies descend on the forests of Michoacan each November and leave for their northward migration around March.
There are 5 publicly accessible sanctuaries: El Rosario, Sierra Chincha, Ejido El Capulín (aka Cerro Pelon), Piedra Herrada, La Mesa. The first two are in Michoacán and the other three are in the State of Mexico to the east. El Rosario is the most popular, with weekends being very crowded during butterfly season. The Sierra Chincua sanctuary is much more rustic.
The sanctuaries are in pine and oyamel forested hills, so expect some moderate hiking. For El Rosario, it's about a 2-km hike up to the top of the hill where the butterflies congregate.
The area is a pine and oyamel forest. The monarch butterflies tend to congregate on the branches of the oyamel trees to conserve warmth. In the later part of the season, late February to early March, as the climate warms a little, the butterflies begin to fly about in late numbers when there is sufficient sun to warm them.
The altitude is high enough for there to be a noticeable drop in temperature from the surrounding villages. The temperature drop is also partly due to the hilltops being usually cloudy, which tend to start forming around 10:00.
The sanctuaries are most easily accessible starting from Morelia, Toluca, or Mexico City. There are tours that can be had for around M$600 to El Rosario from Morelia. Tickets are sold at the tourism information kiosk near the main cathedral. Read on if you want to go on your own. For more information, and locations see this page in Spanish by Unknown Mexico.
Getting to El Rosario via bus takes around 5 hours and requires at least 2 bus changes. Doing the trip there and back, in one day is possible but you should leave early. The total cost should be around M$200 one-way.
Buses depart from the Morelia central bus terminal, or pass through a bus stop on the eastern side of the city. The alternative bus stop is on Av Francisco I. Madero Ote just past the ring road to the east (19.710762, -101.164094) which you can get to via taxi or colectivo.
For the first leg of the journey you need to get to San Felipe just before the city of Zitácuaro. Buses direct to Zitácuaro cost $135, take around 2½ hours, and stop directly in San Felipe. You can also go to Ciudad Hidalgo and change bus to Zitácuaro. Buses to Ciudad Hidalgo cost M$120 and run every 30 minutes until 06:00 and a few on the hour until 24:00. From there, go to the other side of town, a 30-min walk or take a combi, to catch a bus heading to Zitácuaro and get dropped of at San Felipe. If you arrive early enough, say before 09:00, it can be faster and cheaper to go Aporo (M$15) - Angangueo (M$16) - El Rosario (M$32) from Ciudad Hidalgo.
From San Felipe you should take the local green bus north to Ocampo. The trip costs M$20 and takes around 45 min. From Ocampo take a colectivo to El Rosario for M$35 which takes another 30 min or so.
There are infrequent buses from the Observatorio bus station in Mexico City directly to Angangueo or more frequently to Zitácuaro or Tlalpujahua.
Once you're in the park, it's a roughly 45-minute climb to the butterflies.
Go to Angangueo (see section above) and take bus north and get dropped off at the road to Sierra Chincua, a few kilometers outside of town. Then there is a couple of kilometers walk to the entrance.
Once you're inside the sanctuaries, the only options are walking and horseback riding. If you take your time, the uphill climb in El Rosario isn't too bad. The horseback riding is only one way. So you can ride up and walk back.
There are more souvenir shops than you'll want to visit on the path from the main parking lot to the entrance. Nearly everything is butterfly-themed, from jewelry to clothing to knickknacks.
There is nothing to eat inside the sanctuaries. However, just below the entrance to El Rosario, there are many relatively economical restaurants.