Türkiye itineraries: 4 routes to explore the country
In four itineraries for Türkiye, travelers can discover the country's ancient ruins, enticing markets, fairy-tale terrain and sparkling coastline.

As a country that touches two continents, Türkiye presents travelers with an equally expansive variety of experiences. There's the iconic city of Istanbul, with its historic monuments, enticing markets and extraordinary food scene. There are ancient ruins scattered across the country in fascinating cities like Troy (Truva) and Ephesus (Efes). The thermal baths of Pamukkale and the fairy chimneys of Cappadocia (Kapadokya) must be seen to be believed. The waters along the Mediterranean coastline almost glow.
With all that beauty, it's hard to narrow down what to see on a trip to Türkiye. That's why we created four itineraries that take you across the best places in the country. These 10-day to two-week itineraries can be lengthened by extending your stay at stops along the way or by combining multiple itineraries to make the holiday of your dreams.
Here are the four best itineraries for exploring Türkiye. Exception: The parser function of type "canto_diptych" is not defined. Define your custom parser functions as: https://github.com/shuqikhor/editorjs-html-php#extend-for-custom-blocks in /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php:70 Stack trace: #0 /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php(17): edjsHTML::parse_function_error('canto_diptych') #1 [internal function]: edjsHTML::parse_block(Array) #2 /code/web/modules/custom/editorjs_custom_plugins/src/Parser/CustomParser.php(28): array_map(Array, Array) #3 /code/web/modules/custom/aws_event_pipeline/src/Mappers/v1/ArticleMapper.php(123): Drupal\editorjs_custom_plugins\Parser\CustomParser::parse(Array) #4 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(168): Drupal\aws_event_pipeline\Mappers\v1\ArticleMapper->toAwsPayload(Object(Drupal\node\Entity\Node)) #5 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(151): Drupal\aws_event_pipeline\AwsFormatter->getPayload(Object(Drupal\node\Entity\Node), Array) #6 /code/web/modules/custom/aws_event_pipeline/src/AwsEventSync.php(174): Drupal\aws_event_pipeline\AwsFormatter->getAwsMessage(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent), Array) #7 /code/web/modules/custom/aws_event_pipeline/src/Plugin/QueueWorker/AepQueueProcessor.php(177): Drupal\aws_event_pipeline\AwsEventSync->sendToAws(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #8 /code/web/modules/contrib/ultimate_cron/src/QueueWorker.php(111): Drupal\aws_event_pipeline\Plugin\QueueWorker\AepQueueProcessor->processItem(Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #9 [internal function]: Drupal\ultimate_cron\QueueWorker->queueCallback(Object(Drupal\ultimate_cron\Entity\CronJob)) #10 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(325): call_user_func(Array, Object(Drupal\ultimate_cron\Entity\CronJob)) #11 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(471): Drupal\ultimate_cron\Entity\CronJob->invokeCallback() #12 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(213): Drupal\ultimate_cron\Entity\CronJob->run(Object(Drupal\Core\StringTranslation\TranslatableMarkup)) #13 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(334): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launch(Object(Drupal\ultimate_cron\Entity\CronJob)) #14 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(309): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->runThread('6121524', 1, Array) #15 /code/web/modules/contrib/ultimate_cron/src/UltimateCron.php(64): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launchJobs(Array) #16 /code/web/modules/contrib/ultimate_cron/src/ProxyClass/UltimateCron.php(70): Drupal\ultimate_cron\UltimateCron->run() #17 /code/web/core/modules/system/src/CronController.php(46): Drupal\ultimate_cron\ProxyClass\UltimateCron->run() #18 [internal function]: Drupal\system\CronController->run() #19 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array) #20 /code/web/core/lib/Drupal/Core/Render/Renderer.php(592): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #21 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure)) #22 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) #23 /code/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #24 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #25 /code/web/modules/contrib/redirect_after_login/src/RedirectMiddleware.php(44): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #26 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Drupal\redirect_after_login\RedirectMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #27 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #28 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(191): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #29 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(128): Drupal\page_cache\StackMiddleware\PageCache->fetch(Object(Symfony\Component\HttpFoundation\Request), 1, true) #30 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(82): Drupal\page_cache\StackMiddleware\PageCache->lookup(Object(Symfony\Component\HttpFoundation\Request), 1, true) #31 /code/vendor/asm89/stack-cors/src/Cors.php(53): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #32 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Asm89\Stack\Cors->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #33 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #34 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #35 /code/web/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #36 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #37 {main}
1. From Istanbul to Ephesus
10-day itinerary
Distance: 800km (497 miles)
Begin in Istanbul, a city of minarets, bath houses and cats, and finish among the ruins of ancient Ephesus. In between, admire the Ottoman heritage of Edirne, explore the memory-filled battlefields of the Gallipoli (Gelibolu) Peninsula and savor the sunny shores of the Aegean, with its historic cities and powdery beaches.
Istanbul: 3 days
Enjoy Istanbul, steeped in the grandeur of the past, where cultures, religions and civilizations converge. The city's neighborhoods embrace the legendary Bosphorus, gently kissing Asia on one side and Europe on the other. The Hagia Sophia Grand Mosque and Topkapı Palace in the historic district mesmerize with their beauty. For shopping, the Grand Bazaar and Spice Bazaar beckon visitors with their lively atmospheres.
Next stop: Drive two hours and 45 minutes from Istanbul to Edirne.
Edirne: 1 day
Set off toward Edirne, once the capital of the Ottoman Empire. Today, the city still gleams with architectural monuments, particularly the Selimiye Mosque. Reflecting its City of Water moniker, Edirne is adorned with fountains, sprawling hamams and the Sultan Beyazıt II Mosque Complex, where water and music were used as psychological therapy.
Next stop: Drive two hours and 30 minutes from Edirne to Gallipoli.
Gallipoli: 2 days
Delve into the history of Gallipoli, a narrow peninsula where some of WWI's fiercest battles took place. Gallipoli now hosts visitors from the United Kingdom, Australia and New Zealand as well as a steady stream of domestic visitors for commemorative ceremonies each year. Its trenches, fortresses, cemeteries and monuments function as a somber open-air museum.
Next stop: Drive an hour from Gallipoli to Troy.
Troy: 1 day
The eyes of archaeology enthusiasts will light up at the sight of Troy. Although famed the world over for its key role in Iliad, the city amassed an archaeological record that extends far beyond Homer's epic poem. Before walking through the ancient city, visit the Troy Museum, which provides context and chronology for your tour of the ruins.
Next stop: Drive four hours from Troy to İzmir.
İzmir: 2 days
Next stop is İzmir, where vibrant nightlife, delicious seafood and stupendous beaches await. Easily accessible by metro, Smyrna, nestled in the heart of the city, sheds light on its history. The beloved coastal resorts of Çeşme and Alaçatı also create irresistible reasons to loiter.
Next stop: Drive an hour from İzmir to Ephesus.
Ephesus: 1 day
Find your way to Ephesus, a remarkably well-preserved site where you can stare with awe at structures from the Roman and Hellenistic periods. Listed as a UNESCO World Heritage Site, Ephesus includes attractions such as the Library of Celsus and the Great Theater. Nearby, you'll find the Temple of Artemis, one of the Seven Wonders of the Ancient World.Exception: The parser function of type "canto_collage" is not defined. Define your custom parser functions as: https://github.com/shuqikhor/editorjs-html-php#extend-for-custom-blocks in /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php:70 Stack trace: #0 /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php(17): edjsHTML::parse_function_error('canto_collage') #1 [internal function]: edjsHTML::parse_block(Array) #2 /code/web/modules/custom/editorjs_custom_plugins/src/Parser/CustomParser.php(28): array_map(Array, Array) #3 /code/web/modules/custom/aws_event_pipeline/src/Mappers/v1/ArticleMapper.php(123): Drupal\editorjs_custom_plugins\Parser\CustomParser::parse(Array) #4 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(168): Drupal\aws_event_pipeline\Mappers\v1\ArticleMapper->toAwsPayload(Object(Drupal\node\Entity\Node)) #5 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(151): Drupal\aws_event_pipeline\AwsFormatter->getPayload(Object(Drupal\node\Entity\Node), Array) #6 /code/web/modules/custom/aws_event_pipeline/src/AwsEventSync.php(174): Drupal\aws_event_pipeline\AwsFormatter->getAwsMessage(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent), Array) #7 /code/web/modules/custom/aws_event_pipeline/src/Plugin/QueueWorker/AepQueueProcessor.php(177): Drupal\aws_event_pipeline\AwsEventSync->sendToAws(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #8 /code/web/modules/contrib/ultimate_cron/src/QueueWorker.php(111): Drupal\aws_event_pipeline\Plugin\QueueWorker\AepQueueProcessor->processItem(Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #9 [internal function]: Drupal\ultimate_cron\QueueWorker->queueCallback(Object(Drupal\ultimate_cron\Entity\CronJob)) #10 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(325): call_user_func(Array, Object(Drupal\ultimate_cron\Entity\CronJob)) #11 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(471): Drupal\ultimate_cron\Entity\CronJob->invokeCallback() #12 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(213): Drupal\ultimate_cron\Entity\CronJob->run(Object(Drupal\Core\StringTranslation\TranslatableMarkup)) #13 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(334): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launch(Object(Drupal\ultimate_cron\Entity\CronJob)) #14 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(309): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->runThread('6121524', 1, Array) #15 /code/web/modules/contrib/ultimate_cron/src/UltimateCron.php(64): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launchJobs(Array) #16 /code/web/modules/contrib/ultimate_cron/src/ProxyClass/UltimateCron.php(70): Drupal\ultimate_cron\UltimateCron->run() #17 /code/web/core/modules/system/src/CronController.php(46): Drupal\ultimate_cron\ProxyClass\UltimateCron->run() #18 [internal function]: Drupal\system\CronController->run() #19 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array) #20 /code/web/core/lib/Drupal/Core/Render/Renderer.php(592): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #21 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure)) #22 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) #23 /code/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #24 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #25 /code/web/modules/contrib/redirect_after_login/src/RedirectMiddleware.php(44): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #26 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Drupal\redirect_after_login\RedirectMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #27 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #28 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(191): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #29 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(128): Drupal\page_cache\StackMiddleware\PageCache->fetch(Object(Symfony\Component\HttpFoundation\Request), 1, true) #30 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(82): Drupal\page_cache\StackMiddleware\PageCache->lookup(Object(Symfony\Component\HttpFoundation\Request), 1, true) #31 /code/vendor/asm89/stack-cors/src/Cors.php(53): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #32 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Asm89\Stack\Cors->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #33 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #34 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #35 /code/web/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #36 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #37 {main}
2. The highlights of Anatolia
13-day itinerary
Distance: 1200km (746 miles)
From Cappadocia's fairy chimneys to Pamukkale's travertines, this route couples Anatolia's natural beauty with its history. After exploring ancient cities around Ankara, head south to Konya, Türkiye's spiritual capital and home to whirling dervishes. Then continue west, where you'll spend days immersed in nature and outdoor activities.
Cappadocia: 3 days
Start with the enchanting sites of Cappadocia, with its picturesque hiking trails, churches carved into rock and the geological oddity of its fairy chimneys, not to mention the Byzantine-era underground cities of Kaymaklı and Derinkuyu. For one of Cappadocia's singular experiences, witness these wonders from the sky aboard a hot-air balloon. Spring is perfect for hiking, though the snowy winter landscapes display an attractive and completely different view.
Next stop: Drive four hours from Cappadocia to Ankara.
Ankara: 2 days
Continue the journey in Türkiye's capital, Ankara. Here, trace the history of the Republic of Türkiye, notably at Atatürk's hilltop mausoleum, Anıt Kabir. But Ankara isn't just about the republic; it possesses a rich ancient history too. Check out the beautiful Arslanhane Cami, a Seljuk-era mosque. In 2023, the nearby city of Gordion, the ancient capital of Phrygia, was added to the list of UNESCO World Heritage Sites.
Detour: Investigate the ruins of Hattuşa, the capital of the Hittites, three hours and 30 minutes away.
Next stop: Drive three hours from Ankara to Konya.
Konya: 2 day
Experience the spiritual ambiance of Konya, where the mausoleum of Sufi poet Mevlâna stands. Every December, his passing is commemorated with a grand event featuring guests from all over the world. The city has nurtured whirling dervishes and Sufi music and poetry, and is also famous for its etli ekmek (meat bread).
Detour: Journey three hours to reach Çatalhöyük and the Neolithic era.
Next stop: Drive two hours and 30 minutes from Konya to Eğirdir.
Eğirdir: 2 day
Travel onward to Eğirdir on the shores of Türkiye's fourth-largest freshwater lake for panoramic views of the Taurus Mountains. The 500km (310-mile) St Paul Trail, traced by St Paul the Apostle, is an exceptional hike. Around the lake, you'll find excellent restaurants exposing stunning vistas.
Detour: Drive one hour and 25 minutes to tour the ancient Pisidian city of Sagalassos, once visited by Alexander the Great.
Next stop: Drive two hours and 30 minutes from Eğirdir to Pamukkale.
Pamukkale: 2 days
In Pamukkale, gaze at the spectacle of thermal waters cascading over snow-white travertines (terraced basins) – it is almost overwhelming beautiful at sunset. Discover impressive structures among the ruins of the spa city of Hierapolis. Its Roman theater is mesmerizing. Don't miss bathing in the Antique Pool, where ancient history and natural beauty converge in perfect harmony.
Next stop: Drive three hours and 30 minutes from Pamukkale to Bodrum.
Bodrum: 2 days
Where the Aegean meets the Mediterranean, you'll find the Bodrum Peninsula, your final destination. The town bustles with tourists during the summer, so consider visiting in spring. Bodrum is renowned for its pristine beaches and crystal-clear seas. Be sure to board the blue cruises around the city, and don't leave without sampling the city's specialty dish, çökertme kebabı (veal kebab).Exception: The parser function of type "canto_diptych" is not defined. Define your custom parser functions as: https://github.com/shuqikhor/editorjs-html-php#extend-for-custom-blocks in /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php:70 Stack trace: #0 /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php(17): edjsHTML::parse_function_error('canto_diptych') #1 [internal function]: edjsHTML::parse_block(Array) #2 /code/web/modules/custom/editorjs_custom_plugins/src/Parser/CustomParser.php(28): array_map(Array, Array) #3 /code/web/modules/custom/aws_event_pipeline/src/Mappers/v1/ArticleMapper.php(123): Drupal\editorjs_custom_plugins\Parser\CustomParser::parse(Array) #4 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(168): Drupal\aws_event_pipeline\Mappers\v1\ArticleMapper->toAwsPayload(Object(Drupal\node\Entity\Node)) #5 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(151): Drupal\aws_event_pipeline\AwsFormatter->getPayload(Object(Drupal\node\Entity\Node), Array) #6 /code/web/modules/custom/aws_event_pipeline/src/AwsEventSync.php(174): Drupal\aws_event_pipeline\AwsFormatter->getAwsMessage(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent), Array) #7 /code/web/modules/custom/aws_event_pipeline/src/Plugin/QueueWorker/AepQueueProcessor.php(177): Drupal\aws_event_pipeline\AwsEventSync->sendToAws(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #8 /code/web/modules/contrib/ultimate_cron/src/QueueWorker.php(111): Drupal\aws_event_pipeline\Plugin\QueueWorker\AepQueueProcessor->processItem(Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #9 [internal function]: Drupal\ultimate_cron\QueueWorker->queueCallback(Object(Drupal\ultimate_cron\Entity\CronJob)) #10 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(325): call_user_func(Array, Object(Drupal\ultimate_cron\Entity\CronJob)) #11 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(471): Drupal\ultimate_cron\Entity\CronJob->invokeCallback() #12 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(213): Drupal\ultimate_cron\Entity\CronJob->run(Object(Drupal\Core\StringTranslation\TranslatableMarkup)) #13 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(334): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launch(Object(Drupal\ultimate_cron\Entity\CronJob)) #14 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(309): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->runThread('6121524', 1, Array) #15 /code/web/modules/contrib/ultimate_cron/src/UltimateCron.php(64): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launchJobs(Array) #16 /code/web/modules/contrib/ultimate_cron/src/ProxyClass/UltimateCron.php(70): Drupal\ultimate_cron\UltimateCron->run() #17 /code/web/core/modules/system/src/CronController.php(46): Drupal\ultimate_cron\ProxyClass\UltimateCron->run() #18 [internal function]: Drupal\system\CronController->run() #19 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array) #20 /code/web/core/lib/Drupal/Core/Render/Renderer.php(592): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #21 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure)) #22 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) #23 /code/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #24 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #25 /code/web/modules/contrib/redirect_after_login/src/RedirectMiddleware.php(44): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #26 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Drupal\redirect_after_login\RedirectMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #27 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #28 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(191): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #29 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(128): Drupal\page_cache\StackMiddleware\PageCache->fetch(Object(Symfony\Component\HttpFoundation\Request), 1, true) #30 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(82): Drupal\page_cache\StackMiddleware\PageCache->lookup(Object(Symfony\Component\HttpFoundation\Request), 1, true) #31 /code/vendor/asm89/stack-cors/src/Cors.php(53): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #32 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Asm89\Stack\Cors->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #33 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #34 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #35 /code/web/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #36 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #37 {main}
3. Along the Mediterranean coast
13-day itinerary
Distance: 570km (354 miles)
Starting from Antalya, the country's top summer-holiday haven, this route will take you westward along a Mediterranean coast known for its beaches. Besides trying your hand at the water sports on offer, you can explore the coast's coves and islands aboard one of the many boat tours.
Antalya: 3 days
Begin in Antalya, where you'll find everything you'd expect from a Mediterranean holiday: beaches, warm waters and a lively city scene, with especially vibrant nightlife. In Antalya's center, the Kaleiçi (Old Antalya) area provides an authentic experience among well-preserved, colorful houses and cute cafes.
Detour: Visit the ancient city of Olympos, on the coast two hours south of Antalya.
Next stop: Drive three hours from Antalya to Kekova.
Kekova: 1 day
Board a boat tour from the Üçağız dock to Kekova Island and the bays of Tersane, Aperlai and Aquarium. From aboard a glass-bottom boat or while diving, witness the sunken city of Simena – submerged off the island's northern shore as a result of 2nd-century earthquakes. Walk among the ruins on the uninhabited island.
Next stop: Drive 40 minutes from Kevoka to Kaş.
Kaş: 2 days
What sets Kaş apart is its diverse array of water activities, which extend beyond the typical sun, sea and sand choices. Dive operators supply professional services at the country's premier diving spot. Additionally, you can reach nearby islands and coves as part of boat tours. Nature enthusiasts will appreciate the area's excellent hiking trails.
Next stop: Drive 40 minutes from Kaş to Kalkan.
Kalkan: 2 day
Continue along the Mediterranean coast to Kalkan. Seeking shallow waters and fine sand? Look no further than Patara Beach, Türkiye's longest beach, complete with its own ancient city. Move your explorations underwater at local dive sites. Once you've had enough sea and sand, take a short drive to the must-see city of Xanthos.
Next stop: Drive one hour and 15 minutes from Kalkam to Fethiye.
Fethiye: 3 days
Head west along the coast to Fethiye. From atop nearby Babadağ, you can paraglide or take in the breathtaking views from the summit 1960m (6420ft) up. Hikers can tackle the Lycian Way, among the world's great long-distance walks. Then there are the beaches and boat tours to surrounding coves. After dark, change gears amid Fethiye's nightlife, which even includes English pubs.
Next stop: Drive three hours from Fethiye to Datça.
Datça: 2 day
Relax in Datça, where the Aegean and Mediterranean converge. With its Blue Flag beaches, surfing and sailing, Datça is a water-lover's paradise – Palamutbükü Cove stands out for its long beach and clean sea. Datça remains a tourist draw even in the winter, thanks to its Almond Blossom Festival every February.
Detour: The ancient city of Knidos two hours away adds a unique flavor to this place. Exception: The parser function of type "canto_diptych" is not defined. Define your custom parser functions as: https://github.com/shuqikhor/editorjs-html-php#extend-for-custom-blocks in /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php:70 Stack trace: #0 /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php(17): edjsHTML::parse_function_error('canto_diptych') #1 [internal function]: edjsHTML::parse_block(Array) #2 /code/web/modules/custom/editorjs_custom_plugins/src/Parser/CustomParser.php(28): array_map(Array, Array) #3 /code/web/modules/custom/aws_event_pipeline/src/Mappers/v1/ArticleMapper.php(123): Drupal\editorjs_custom_plugins\Parser\CustomParser::parse(Array) #4 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(168): Drupal\aws_event_pipeline\Mappers\v1\ArticleMapper->toAwsPayload(Object(Drupal\node\Entity\Node)) #5 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(151): Drupal\aws_event_pipeline\AwsFormatter->getPayload(Object(Drupal\node\Entity\Node), Array) #6 /code/web/modules/custom/aws_event_pipeline/src/AwsEventSync.php(174): Drupal\aws_event_pipeline\AwsFormatter->getAwsMessage(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent), Array) #7 /code/web/modules/custom/aws_event_pipeline/src/Plugin/QueueWorker/AepQueueProcessor.php(177): Drupal\aws_event_pipeline\AwsEventSync->sendToAws(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #8 /code/web/modules/contrib/ultimate_cron/src/QueueWorker.php(111): Drupal\aws_event_pipeline\Plugin\QueueWorker\AepQueueProcessor->processItem(Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #9 [internal function]: Drupal\ultimate_cron\QueueWorker->queueCallback(Object(Drupal\ultimate_cron\Entity\CronJob)) #10 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(325): call_user_func(Array, Object(Drupal\ultimate_cron\Entity\CronJob)) #11 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(471): Drupal\ultimate_cron\Entity\CronJob->invokeCallback() #12 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(213): Drupal\ultimate_cron\Entity\CronJob->run(Object(Drupal\Core\StringTranslation\TranslatableMarkup)) #13 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(334): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launch(Object(Drupal\ultimate_cron\Entity\CronJob)) #14 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(309): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->runThread('6121524', 1, Array) #15 /code/web/modules/contrib/ultimate_cron/src/UltimateCron.php(64): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launchJobs(Array) #16 /code/web/modules/contrib/ultimate_cron/src/ProxyClass/UltimateCron.php(70): Drupal\ultimate_cron\UltimateCron->run() #17 /code/web/core/modules/system/src/CronController.php(46): Drupal\ultimate_cron\ProxyClass\UltimateCron->run() #18 [internal function]: Drupal\system\CronController->run() #19 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array) #20 /code/web/core/lib/Drupal/Core/Render/Renderer.php(592): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #21 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure)) #22 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) #23 /code/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #24 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #25 /code/web/modules/contrib/redirect_after_login/src/RedirectMiddleware.php(44): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #26 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Drupal\redirect_after_login\RedirectMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #27 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #28 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(191): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #29 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(128): Drupal\page_cache\StackMiddleware\PageCache->fetch(Object(Symfony\Component\HttpFoundation\Request), 1, true) #30 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(82): Drupal\page_cache\StackMiddleware\PageCache->lookup(Object(Symfony\Component\HttpFoundation\Request), 1, true) #31 /code/vendor/asm89/stack-cors/src/Cors.php(53): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #32 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Asm89\Stack\Cors->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #33 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #34 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #35 /code/web/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #36 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #37 {main}
4. Culture, cuisine and history in the east
14-day itinerary
Distance: 1200km (746 miles)
Explore the history-rich lands of Türkiye's southeast and east. The culture, cuisine and history of Gaziantep (Antep), Şanlıurfa and Mardin will entice you to linger, while Göbekli Tepe will whisper of ancient times. Mt Ararat (Ağrı Dağı) will provide staggering views or a challenging climb before the tour concludes at the Palandöken Ski Resort in Erzurum.
Gaziantep: 3 days
Gaziantep ranks among the best places to enjoy Turkish cuisine. Start with a famous beyran soup for breakfast, then shop at the Bakırcılar and Zincirli bazaars. Don't miss the chance to savor the finest baklava and katmer (flatbread layered with nuts and clotted cream) in Gaziantep. The city is also home to Zeugma, the world's largest mosaic museum.
Detour: From the village of Halfeti, sail the Euphrates for 90 minutes to reach a fortress and sunken village.
Next stop: Drive one hour and 15 minutes from Gaziantep to Şanlıurfa.
Şanlıurfa: 2 days
Visit Şanlıurfa, where faith tourism thrives. In addition to numerous mosques and shrines, the city contains the sacred fish ponds of Abraham, and Göbekli Tepe stands as the world's oldest known site of worship. The nearby town of Harran fascinates with its beehive houses and ruins.
Detour: Travel two hours and 30 minutes to climb Nemrut Dağı (Mt Nemrut), with its colossal statues and breathtaking dawn and dusk views.
Next stop: Drive two hours and 45 minutes from Şanlıurfa to Mardin.
Mardin: 2 days
Take to the narrow streets of hilltop Mardin to wander among and photograph its famed yellow stone buildings, which glow golden in the sunlight. An ancient city embracing diverse cultures and beliefs, Mardin contains historic monasteries, churches and mosques.
Detour: Visit Dara an hour away to see its Roman cisterns.
Next stop: Drive 5 hours and 45 minutes from Mardin to Van.
Van: 3 days
The city of Van sits on the shores of Lake Van (Van Gölü), Türkiye's largest lake. On the eastern shore of the lake, you'll find the abandoned city of Old Van and Van Castle, which date back to the Urartu era. Also visit Akdamar Kilisesi, a sacred site for Armenian Christians. It's located on a small island off the southern shore of the lake.
Next stop: Drive two hours and 15 minutes from Van to Doğubayazıt.
Doğubayazıt: 2 days
Continue on to Doğubayazıt, a mountainous town with thrilling views of Mt Ararat, Türkiye's highest peak at 5137m (16,853ft). Those committed to climbing it should allow extra time in their itinerary. The ideal time for climbing is July to August. While you're in town, make sure you visit the İshak Paşa Palace, built to showcase the power and grandeur of the Ottoman Empire.
Next stop: Drive three hours and 30 minutes from Doğubayazıt to Erzurum.
Erzurum: 2 days
Erzurum's chilly and somber atmosphere is enlivened by its youthful student population and surprisingly vibrant cafe and dining scene. The city is filled with Seljuk and Ottoman monuments, among the most captivating are the Çifte Minareli Medrese and Üç Kümbetler. The city also caters to winter-sports enthusiasts, with Palandöken Ski Resort among Türkiye's finest.
This article was adapted from Lonely Planet's Türkiye guidebook from December 2024.