Luxury Red Sea Resorts: An Exceptional Stay - Visit Red Sea



Where to stay
Experience luxury and nature, residing in perfect harmony
THE RED SEA
Discover our luxury resorts
A handpicked selection of the best luxury hotels and resorts on the planet.



Inspired by the Nabataean traders, the Six Senses Southern Dunes Resort echoes the shape of the desert to offer prime aspects over the inspiring landscape of the Hijaz Mountains. Venture to The Artisan Village to hear a story of cultural history and heritage, or under the canopy of the Oasis, the heart of the resort, where vibrant activities gather under one roof.




Find your sanctuary on the secluded Ummahat Island at The St. Regis Red Sea Resort, where 90 spectacular avant- garde villas dot the landscape. Fringed by a thriving coral reef, and devoted to the preservation of a diverse ecosystem, this vision of exquisite living is just a short boat – or seaplane – ride away.
Transcend the ordinary, with a high-tech fitness center and kids club, or relax in our state-of-the-art spa and pool. Bespoke services and the St. Regis Butler Service ensures everyone’s needs are catered to, whilst three restaurants, each with its own distinct concept, artfully combine the spirit of the region with exceptional fine dining.

EXPLORING THE RED SEA
Pristine islands and breathtaking reefs
One of the world’s last true hidden treasures, The Red Sea is surrounded by the world’s fourth-largest barrier reef system and spans over 28,000-square-kilometer with an archipelago of more than 90 untouched island,dormant volcanos, sweeping desert dunes, mountain canyons and historical and cultural sites. The Red Sea will be ready to welcome the first guests in Winter 2024.



EXPLORING THE RED SEA
Majestic mountains and sprawling dunes
As the sun's gentle touch illuminates the rugged mountain peaks and the golden sands of the desert dunes, a world of opulence and elegance unfolds. Indulge in the finest accommodations, where modern comfort harmonizes with ancient landscapes, offering breathtaking views and unparalleled relaxation.







The following has evaluated to null or missing: ==> element.linkToPage [in template "20097#20123#378290" at line 72, column 62] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${element.linkToPage.getFriendlyUrl()} [in template "20097#20123#378290" at line 72, column 60] ----
1<div class="bgContainer bgContainer--shapeBottomStart bgContainer--white">
2 <#if (shapeBackgroundImage.getData())?? && shapeBackgroundImage.getData() != "">
3 <img class="bgContainer__shape bgContainer__shape--1" ale="background shape" width="417" height="1172" data-fileentryid="${shapeBackgroundImage.getAttribute("fileEntryId")}" src="${shapeBackgroundImage.getData()}" />
4 </#if>
5 <!-- begin sections/filteredGrid -->
6 <section
7 class="filteredGrid filteredGrid--transparent filteredGrid--smallPaddingTop filteredGrid--smallPaddingBottom">
8 <div class="filteredGrid__inner wrapper" data-scroll-anim="">
9
10 <!-- begin components/heading -->
11 <div class="heading heading--horizontal heading--horizontal11 filteredGrid__heading"
12 data-scroll-anim-item="fadeInStart;0;0.3;easeOutCubic" style="transform: translateX(0px); opacity: 1;">
13 <h2 class="heading__title"><#if (title.getData())??>
14 ${title.getData()}
15 </#if></h2>
16 <h3 class="heading__subtitle"><#if (subtitle.getData())??>
17 ${subtitle.getData()}
18 </#if></h3>
19 <p class="heading__text"><#if (lead.getData())??>
20 ${lead.getData()}
21 </#if></p>
22 </div>
23 <!-- end components/heading -->
24 <div class="filteredGrid__filters">
25 <div class="filteredGrid__label"><#if (searchText.getData())??>${searchText.getData()}</#if></div>
26 <div class="filteredGrid__fields">
27 <#if categoryGroup.getSiblings()?has_content>
28 <#assign seq = categoryGroup.getSiblings()>
29 <#list categoryGroup.getSiblings() as cur_category_group>
30 <div id="hotel-filter-${cur_category_group?index}" class="filteredGrid__field">
31
32 <!-- begin components/select -->
33
34 <div class="select select--skies select--placeholder" data-input-label="select--filled"
35 data-custom-select="" data-custom-select-theme="skies">
36 <select id="<#if (cur_category_group.category.getData())??>${cur_category_group.category.getData()}
37</#if>" name="<#if (cur_category_group.category.getData())??>${cur_category_group.category.getData()}</#if>" class="select__select select__input--hidden" data-input-label-input="" data-custom-select-input="">
38 <option value="" class="select__option" selected="selected"></option>
39 <#if cur_category_group.option.getSiblings()?has_content>
40 <#list cur_category_group.option.getSiblings() as cur_categoryGroup_option>
41 <#if (cur_categoryGroup_option.getData())??>
42 <option value="${cur_categoryGroup_option.getData()}"
43 class="select__option">${cur_categoryGroup_option.getData()}</option>
44
45 </#if>
46 </#list>
47 </#if>
48
49 </select>
50 <label for="<#if (cur_category_group.category.getData())??>${cur_category_group.category.getData()}</#if>" class="select__label"><#if (cur_category_group.category.getData())??>
51 ${cur_category_group.category.getData()}
52 </#if>
53 </label>
54 <span class="input__error"></span>
55 </div>
56
57 <!-- end components/select -->
58 </div>
59 </#list>
60 </#if>
61
62 </div>
63 </div>
64
65 <div class="filteredGrid__grid">
66
67 <#if card.getSiblings()?has_content>
68 <#list card.getSiblings() as element>
69 <#if (element.cardLink.getData()?has_content)>
70 <a href="<#if (element.cardLink.getData())??>${element.cardLink.getData()}</#if>" class="gridTile gridTile--default filteredGrid__item" data-card" <#if getterUtil.getBoolean(element.openInNewTab.getData())>target="_blank"</#if>>
71 <#else>
72 <a data-senna-off="true" href="${element.linkToPage.getFriendlyUrl()}" class="gridTile gridTile--default filteredGrid__item" data-card" <#if getterUtil.getBoolean(element.openInNewTab.getData())>target="_blank"</#if>>
73 </#if>
74 <div class="gridTile__label gridTile__label--top"><#if getterUtil.getBoolean(element.opens.getData())>OPENS<#elseif getterUtil.getBoolean(element.planned.getData())><#else></#if></div>
75 <#if element.cardCategory.getSiblings()?has_content>
76 <#list element.cardCategory.getSiblings() as cur_card_category>
77 <input class="hidden-input" type="hidden"
78 data-select-id="${cur_card_category?index}"
79 data-input-id="${element_index}"
80 value="<#if (cur_card_category.categoryValue.getData())??>${cur_card_category.categoryValue.getData()}</#if>"
81 >
82 </#list>
83 </#if>
84 <div class="gridTile__logo">
85 <#if (element.cardDefaultImage.getData())?? && element.cardDefaultImage.getData() != "">
86 <img width="140" height="30" class="gridTile__logoImg gridTile__logoImg--default"
87 alt="${element.cardDefaultImage.getAttribute("alt")}"
88 data-fileentryid="${element.cardDefaultImage.getAttribute("fileEntryId")}"
89 src="${element.cardDefaultImage.getData()}"/>
90 </#if><#if (element.cardOverlayImage.getData())?? && element.cardOverlayImage.getData() != "">
91 <img width="140" height="30" class="gridTile__logoImg gridTile__logoImg--hover"
92 alt="${element.cardOverlayImage.getAttribute("alt")}"
93 data-fileentryid="${element.cardOverlayImage.getAttribute("fileEntryId")}"
94 src="${element.cardOverlayImage.getData()}"/>
95 </#if>
96 </div>
97 <div class="gridTile__label gridTile__label--bottom"><#if (element.date.getData())??>${element.date.getData()}</#if>
98 </div>
99
100 </a>
101 </#list>
102 </#if>
103
104 </div>
105 </div>
106 </section>
107 <!-- end sections/filteredGrid -->
108</div>
109<script>
110 function getValues(select) {
111 const newArray = []
112 var inputs = select.querySelector('.select__value');
113 inputs.forEach(function (input) {
114 if (!!input.innerHTML.trim()) {
115 newArray.push(input.innerHTML.trim());
116 }
117 })
118 return newArray;
119 }
120
121 function Listen() {
122 var filterSelects = document.querySelectorAll('.select');
123 const cards = document.querySelectorAll(`[data-card]`);
124 function getCardValues(card) {
125 const CardValueArray = []
126 var inputs = card.querySelectorAll('.hidden-input');
127 inputs.forEach(function (input) {
128 if (!!input.value.trim()) {
129 CardValueArray.push(input.value.trim());
130 }
131 })
132 return CardValueArray;
133 }
134 function updateCardVisibility() {
135 cards.forEach(function (card) {
136 const cardValues = Array.from(card.querySelectorAll('.hidden-input'));
137 const cardMatches = Array.from(filterSelects).every(function (filterSelect, selectIndex) {
138 const selectedValue = filterSelect.querySelector('.select__value').innerHTML;
139 console.log("selectedValue " + selectedValue);
140 const hasMatchingValue = cardValues.some(function (cardValue) {
141 console.log(cardValue.value);
142
143 return cardValue.dataset.selectId == selectIndex && cardValue.value.trim() == selectedValue.trim();
144 });
145 return selectedValue === '' || hasMatchingValue;
146 });
147 card.style.display = cardMatches ? 'flex' : 'none';
148 });
149 }
150 filterSelects.forEach(function (filterSelect) {
151 const selectInSelect = filterSelect.querySelector('select');
152 selectInSelect.addEventListener('blur', updateCardVisibility);
153 });
154 }
155 Listen();
156
157 window.dataLayer = window.dataLayer || [];
158
159 const hotelFilter0 = document.querySelector("#hotel-filter-0");
160 const hotelFilter1 = document.querySelector("#hotel-filter-1");
161 const hotelFilter2 = document.querySelector("#hotel-filter-2");
162 const gridTile = document.querySelectorAll(".filteredGrid__grid .gridTile");
163
164 let filter1 = "";
165 let filter2 = "";
166 let filter3 = "";
167 let hotelName = "";
168
169 gridTile.forEach((element)=>{
170 element.addEventListener("click", function() {
171 hotelName = this.querySelector(".gridTile__logo img").alt
172 filter1 = hotelFilter0.querySelector("select").value;
173 filter2 = hotelFilter1.querySelector("select").value;
174 filter3 = hotelFilter2.querySelector("select").value;
175
176 window.dataLayer.push({
177 'event': 'book_your_stay',
178 'hotel_name': hotelName,
179 'location': filter1,
180 'type_of_property': filter2,
181 'facilities': filter3,
182 'language': (document.documentElement.getAttribute("lang") == "en-US") ? "English" : "Arabic",
183 'page path': ''
184 });
185 });
186 });
187</script>





