Skip to main content

Top places to eat in San Diego



Yelp’s Top 50 Places to Eat is a list unlike any other “best of” out there. Sure, you’ll see your obvious local favorites on the list, but it’s also chock full of hidden gems and off-the-beaten-path joints like Cesarina tucked away in Point Loma serving authentic Italian cuisine. From fine dining to shawarma food trucks — find them all in Yelp’s Top 50 Places to Eat in San Diego.

Did your favorite restaurant make it into the top 50? Let us know on Twitter and Instagram. Remember, we only know how good a spot is if you take the time to review it. So share your thoughts on Yelp, and maybe your favorites will be on next year’s list! 

Topping this year’s best places to eat list is Thanh Tinh Chay, they have a completely vegan authentic Vietnamese based menu with over 100 meat free options. Thanh Tinh Chay creates their own mock meats, eggless noodles, and bread all in house fresh daily. Yelpers have been raving about the banh mi and spring rolls!

Pro tip: You’re going to want to make a note of these spots, so we made it easy for you. For great businesses at your fingertips, get the Top 50 to-go. Follow this collection on Yelp.

1. Thanh Tinh Chay (City Heights)

Photo by Kelsey G. on Yelp

Cuisine: Vegan and Vietnamese dishes

What they’re known for: Having over 100 different vegan dishes based on authentic Vietnamese dishes. All of the dishes are very detailed in their list of ingredients to ensure that everything is fresh and 100% vegan.

Yelpers say: “Pork belly, pork belly, pork belly. This dish does not have me missing meat at all. It makes me think, “I can really be vegan for a long time.” The texture and flavors truly satisfy me and tastes like the real thing. Vermicelli noodles are very filling –has noodz, veggies, pork belly, eggrolls and some crispity crunchities that add texture to the bowl.” – Yelp Elite Tiffany C.

2. Crafted Greens (El Cajon)

Photo by Vivian T. on Yelp

Cuisine: Sandwiches, salads, flat breads

What they’re know for: After working in the industry for 30 years they decided to open a this family ran restaurant to spend more time with each other. They pride themselves in using ingredients from local farms and making all of their dishes from scratch. The chimichurri grass fed steak sandwich is a local favorite with arugula, roasted tomatoes, chimichurri sauce and a roasted garlic aioli.

Yelpers say: “The Nicoise salad with Cajun seared tuna and no eggs. The salad comes with variety of greens, including romaine, mesclun or a combination of very young salad greens, and green beans mixed with a light and flavorful dijon balsamic vinaigrette dressing. Both the olives and capers added a nice saltiness to the salad, in addition to their own unique flavors. The salad also came with tender fingerling potatoes and slice organic tomatoes.” – Yelp Elite Jack M.

3. Gelati & Peccati (North Park)

Photo by Jack M. on Yelp

Cuisine: Gelato, pizza

What they’re known for: In 2019 Gelati and Peccati became a popular walk up gelato and pizza shop with the goal of creating made from scratch Italian food at a great price. Their menu features 7 signature styles of pizza named after each of the 7 deadly sins along with delicious fresh gelato.

Yelpers say: “I ordered six slices: spicy pepperoni, roasted bellpeppers, zuchinni with ricotta, lemon zest, and cracked black pepper, potato and mozzarella, and two lasagne.  Each one was unique in flavor and delicious!  But my favorite would have to be the lasagne!  Who would’ve thunk it??And of course, I had to order gelato!  I ordered the honey lavender rose water and olive oil with lemon zest; and a Peruvian chocolate and lemon meringue. Sooooo good…I mean, I felt like I was in Italy!” – Yelp Elite Mikey H.

4. Beyer Deli (Otay Mesa)

Photo by Justin C. on Yelp

Cuisine: Deli sandwiches, salads

What they’re known for: Family owned and operated since 2001 creating fresh cut deli sandwiches and salads as well as providing catering services for larger parties. They also sell their fresh cut meats by the pound to create your own perfect deli sandwich at home. The New Yorker is a Yelper favorite with grilled pastrami and corned beef topped with melted Swiss cheese served on a torta.

Yelpers say: “the Manhandler which was awesome. The combination of bacon AND pastrami was true bliss! My wife had the Hot and Delicious which is turkey and bacon with avocado. Now let me tell you despite growing up close to the border my wife has never been a guacamole fan but the avocado spread that Beyer Deli uses could make your floor lamp taste good. What really makes their sandwich is that torta bread- so soft and yummy with any sandwich! Portion size? I had to bring half home! Absolutely loved it!” – Yelp Elite Jeff R.

5. De Cabeza (Chula Vista)

Photo by Jocy C. on Yelp

Cuisine: Tacos, flan, flautas, quesadillas

What they’re known for: Being so close to the Mexico border this spot is known for their authentic street tacos. They have 13 different types of tacos you can choose from along with creamy guacamole to dip crunchy tortilla chips with on the side. Local Yelpers have been raving over the flan to end their meal with!

Yelpers say: “The tacos are truly special and my favorite is the pastor, probably due to the touch of pineapple crowing them on top! But the asada and chorizo versions are outstanding as well. I’ve also enjoyed the alambres on one occasion. This is sort of a dish that appears as three tacos spread out on a large plate, your choice of meat, but comes with bacon as well. I will say that bacon is a dominant flavor enhancer in any meal and it is with the alambres too” – Yelp Elite Ron R.

6. R&G Salumeria Wine Bar (Little Italy)

7. Adrian’s Surf N’ Turf Grill (Clairemont Mesa)

8. Cesarina (Point Loma)

9. Soichi Sushi (North Park)

10. Classics Malt Shop (Point Loma)

11. Taste Of Denmark (Hillcrest)

12. Donny’s Cafe (Bonita)

13. Fernandez Restaurant (Imperial Beach)

14. It’s Raw Poke Shop (Ocean Beach)

15. Mad Munch Grilled Cheezer (Ocean Beach)

16. Siamo Napoli (North Park)

17. Mariscos Mi Gusto Es (City Heights)

18. Rollin Roots (Miramar)

19. Mom’s Pizza and Pasta (Sorrento Valley)

20. Bud & Rob’s New Orleans Bistro (Downtown)

21. Pepper Farm Deli (Santee)

22. Soup Du Jour (Serra Mesa)

23. Common Stock (Hillcrest)

24. The Butcher’s Grill House (Pacific Beach)

25. Northside Shack (Point Loma)

26. El Viejón Seafood (Kearny Mesa)

27. Bravo Cafe & Yogurt (Spring Valley)

28. PB Poke House (Pacific Beach)

29. Pizza e Birra (Little Italy)

30. Chiefy Cafe (Downtown)

31. Mary’s Gourmet Salads (La Jolla)

32. Shawarma Guys (South Park)

33. Jaunt Coffee Roasters (Miramar)

34. RoVino Rotisserie + Wine (Little Italy)

35. Ali’s Chicken & Waffles (City Heights)

36. La Perla Cocina Mexicana 3 (Point Loma)

37. Empanada Kitchen (Downtown)

38. The Empanada Spot (Chula Vista)

39. Famous Waffle Sandwich (Kearny Mesa)

40. HiroNori Craft Ramen (Hillcrest)

41. Humble Bean Cafe (Bay Park)

42. Tahini (Clairemont Mesa)

43. Roxys Tacos (Downtown)

44. Coal Bros Taqueria (Downtown)

45. Grains (University Heights)

46. Tavola Nostra Pizzeria e Cucina (Hillcrest)

47. Jane’s Cafe (Mission Valley)

48. Medina Moroccan-Baja Kitchen (North Park)

49. Konito’s Cafe (Pacific Beach)

50. Baba Kabob (Mira Mesa)


Hungry for more? Check out list for the Top 50 Places to Eat in North County San Diego!

Top Places to Eat in San Diego Methodology: This is an all-time list of the Top Places to Eat in the San Diego area according to Yelp. We identified businesses in the restaurant category on Yelp, then ranked those spots using a number of factors, including the total volume and ratings of reviews. This list looked at businesses in and around the San Diego area. All businesses were marked open on Yelp as of May 11, 2022. When available, all businesses on this list have a passing health score as of May 11, 2022.

[gravityform id="4" title="false" ajax="true"]
<script type="text/javascript">var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&&gform.scriptsLoaded?o():!gform.domLoaded&&gform.scriptsLoaded?window.addEventListener("DOMContentLoaded",o):document.addEventListener("gform_main_scripts_loaded",o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook("action",o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook("filter",o,n,r,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,n){gform.removeHook("action",o,n)},removeFilter:function(o,n,r){gform.removeHook("filter",o,n,r)},addHook:function(o,n,r,t,i){null==gform.hooks[o][n]&&(gform.hooks[o][n]=[]);var e=gform.hooks[o][n];null==i&&(i=n+"_"+e.length),gform.hooks[o][n].push({tag:i,callable:r,priority:t=null==t?10:t})},doHook:function(n,o,r){var t;if(r=Array.prototype.slice.call(r,1),null!=gform.hooks[n][o]&&((o=gform.hooks[n][o]).sort(function(o,n){return o.priority-n.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==n?t.apply(null,r):r[0]=t.apply(null,r)})),"filter"==n)return r[0]},removeHook:function(o,n,t,i){var r;null!=gform.hooks[o][n]&&(r=(r=gform.hooks[o][n]).filter(function(o,n,r){return!!(null!=i&&i!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][n]=r)}});</script> <div class='gf_browser_unknown gform_wrapper gform_legacy_markup_wrapper' id='gform_wrapper_4' ><div id='gf_4' class='gform_anchor' tabindex='-1'></div> <div class='gform_heading'> <span class='gform_description'></span> </div><form data-form-name='Newsletter Signup Popup' method='post' enctype='multipart/form-data' target='gform_ajax_frame_4' id='gform_4' action='/community/top-places-to-eat-in-san-diego/#gf_4' novalidate> <div class='gform_body gform-body'><ul id='gform_fields_4' class='gform_fields top_label form_sublabel_below description_below'><li id="field_4_1" class="gfield field_sublabel_below field_description_below hidden_label gfield_visibility_visible gf-email" data-field-class="gf-email" data-js-reload="field_4_1"><label class='gfield_label screen-reader-text' for='input_4_1' >youremail@address.com</label><div class='ginput_container ginput_container_email'> <input name='input_1' id='input_4_1' type='email' value='' class='large' placeholder='youremail@address.com' aria-invalid="false" /> </div></li><li id="field_4_2" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_4_2"><label class='gfield_label' for='input_4_2' >Phone</label><div class='ginput_container'><input name='input_2' id='input_4_2' type='text' value='' autocomplete='new-password'/></div><div class='gfield_description' id='gfield_description_4_2'>This field is for validation purposes and should be left unchanged.</div></li></ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_4' class='gform_button button' value='Submit' onclick='if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} jQuery("#gform_4").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=4&amp;title=&amp;description=1&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_4' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='4' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_4' value='WyJbXSIsImE0YjFiMmUxY2IxMWVhYTljM2FhNzdkODk4NDUzZmY0Il0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_4' id='gform_target_page_number_4' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_4' id='gform_source_page_number_4' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_4' id='gform_ajax_frame_4' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script> gform.initializeOnLoaded( function() {gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery('#gform_ajax_frame_4').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_4');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_4').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_4').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_4').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_4').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_4').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_4').val();gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery(document).trigger('gform_page_loaded', [4, current_page]);window['gf_submitting_4'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_4').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_4').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [4]);window['gf_submitting_4'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_4').text());}, 50);}else{jQuery('#gform_4').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [4, current_page]);} );} ); </script>
[gravityform id="4" title="false" ajax="true"]
<div class='gf_browser_unknown gform_wrapper gform_legacy_markup_wrapper' id='gform_wrapper_4' ><div id='gf_4' class='gform_anchor' tabindex='-1'></div> <div class='gform_heading'> <span class='gform_description'></span> </div><form data-form-name='Newsletter Signup Popup' method='post' enctype='multipart/form-data' target='gform_ajax_frame_4' id='gform_4' action='/community/top-places-to-eat-in-san-diego/#gf_4' novalidate> <div class='gform_body gform-body'><ul id='gform_fields_4' class='gform_fields top_label form_sublabel_below description_below'><li id="field_4_1" class="gfield field_sublabel_below field_description_below hidden_label gfield_visibility_visible gf-email" data-field-class="gf-email" data-js-reload="field_4_1"><label class='gfield_label screen-reader-text' for='input_4_1' >youremail@address.com</label><div class='ginput_container ginput_container_email'> <input name='input_1' id='input_4_1' type='email' value='' class='large' placeholder='youremail@address.com' aria-invalid="false" /> </div></li><li id="field_4_2" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_4_2"><label class='gfield_label' for='input_4_2' >Phone</label><div class='ginput_container'><input name='input_2' id='input_4_2' type='text' value='' autocomplete='new-password'/></div><div class='gfield_description' id='gfield_description_4_2'>This field is for validation purposes and should be left unchanged.</div></li></ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_4' class='gform_button button' value='Submit' onclick='if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} jQuery("#gform_4").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=4&amp;title=&amp;description=1&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_4' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='4' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_4' value='WyJbXSIsImE0YjFiMmUxY2IxMWVhYTljM2FhNzdkODk4NDUzZmY0Il0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_4' id='gform_target_page_number_4' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_4' id='gform_source_page_number_4' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_4' id='gform_ajax_frame_4' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script> gform.initializeOnLoaded( function() {gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery('#gform_ajax_frame_4').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_4');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_4').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_4').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_4').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_4').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_4').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_4').val();gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery(document).trigger('gform_page_loaded', [4, current_page]);window['gf_submitting_4'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_4').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_4').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [4]);window['gf_submitting_4'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_4').text());}, 50);}else{jQuery('#gform_4').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [4, current_page]);} );} ); </script>