Here are a few recommendations, based on our personal experience. Prices are for high season for two people in a double room. Great service, low-key atmosphere but not near town and shopping. These are two of the best all-inclusive resorts. It's a 10-minute walk from the center of town.
Rooms are spartan but comfortable and snorkeling is decent.
It's on a busy road across from beach, with its own beach access. This small, rustic, low-key hotel is across the road from one of the best snorkeling sites on the island, Dzul Ha. Rooms are basic, pool small. This leads the pack for cheap accommodations. Although not centrally located, it's in a pleasant, safe Mexican neighborhood.