1<!doctype html> 2<html lang="en"> 3 <head> 4 <!-- Google Tag Manager --> 5
5<script>
vendor: 455 bytes, lines 5-15
5 6 (function (w, d, s, l, i) { 7 w[l] = w[l] || []; 8 w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); 9 var f = d.getElementsByTagName(s)[0], 10 j = d.createElement(s), 11 dl = l != 'dataLayer' ? '&l=' + l : ''; 12 j.async = true; 13 j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 14 f.parentNode.insertBefore(j, f); 15 })(window, document, 'script', 'dataLayer', '
15GTM-TBB636SB
vendor: 8 bytes, lines 15-16
15'); 16
16</script>
16 17 <!-- End Google Tag Manager --> 18 <meta charset="UTF-8" /> 19 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 20 <meta name="theme-color" content="#4a6b4a" /> 21 <meta name="color-scheme" content="light" /> 22 <meta name="author" content="Olive Branch" /> 23 <!-- SECURE-01: the static head defaults to Olive Branch. On the SECURE Parenting 24 host, correct the brand-level title/description/OG tags before React mounts so 25 the document never identifies itself as Olive Branch. --> 26
26<script> 27 (function () { 28 try { 29 if ((location.hostname || '').toLowerCase().indexOf('secureparenting') === -1) return; 30 var title = 'SECURE Parenting | Evidence-Informed Parenting Support'; 31 var desc = 'Practical, evidence-informed parenting guidance to help children feel safe, connected, understood and confident.'; 32 document.title = title; 33 var d = document.querySelector('meta[name="description"]'); 34 if (d) d.setAttribute('content', desc); 35 var a = document.querySelector('meta[name="author"]'); 36 if (a) a.setAttribute('content', 'SECURE Parenting'); 37 document.write( 38 '<meta property="og:site_name" content="SECURE Parenting">' + 39 '' + 40 '' + 41 '' + 42 '' + 43 '' + 44 '' + 45 '' 46 ); 47 } catch (e) { /* keep the static defaults */ } 48 })(); 49 </script>
49 50 <!-- Per-domain favicon. Script runs FIRST (before any static <link rel="icon">) so the browser never races to fetch the default olive-branch icon on other domains. --> 51
51<script> 52 (function () { 53 try { 54 var host = (location.hostname || '').toLowerCase(); 55 var icon = '/favicon.png'; 56 if (host.indexOf('kidstherapy') !== -1) icon = '/favicon-kidstherapy.png'; 57 else if (host.indexOf('marriagecounselling') !== -1 || host.indexOf('marriage-counselling') !== -1 || host.indexOf('marriagesg') !== -1) icon = '/favicon-marriage.png'; 58 else if (host.indexOf('proteens') !== -1) icon = '/proteens-favicon.png'; 59 else if (host.indexOf('christiancounselling') !== -1) icon = '/favicon-ccs.png'; 60 else if (host.indexOf('executiveclarity') !== -1) icon = '/favicon-ec.png'; 61 else if (host.indexOf('earlyrhythm') !== -1) icon = '/favicon-earlyrhythm.png'; 62 else if (host.indexOf('secureparenting') !== -1) icon = '/favicon-secureparenting.png'; 63 else if (host.indexOf('impactlearning') !== -1) icon = '/favicon-impactlearning.png'; 64 var v = icon + '?v=7'; 65 66 67 document.write('<link id="ob-favicon" rel="icon" type="image/png" href="' + v + '">');
68 document.write('<link id="ob-favicon-shortcut" rel="shortcut icon" type="image/png" href="' + v + '">'); 69 document.write('<link id="ob-apple-icon" rel="apple-touch-icon" href="' + v + '">'); 70 } catch (e) { 71 document.write('<link rel="icon" href="/favicon.png?v=7" type="image/png">'); 72 } 73 })(); 74 </script>
74 75 <!-- Static fallback ONLY for non-JS crawlers (e.g. Google's favicon bot). Browsers will have already picked the per-domain icon above. --> 76 <noscript> 77 <link rel="icon" type="image/png" href="/favicon.png?v=7" /> 78 <link rel="shortcut icon" type="image/png" href="/favicon.png?v=7" /> 79 <link rel="apple-touch-icon" href="/favicon.png?v=7" /> 80 </noscript> 81 82 83 <!-- Preconnect to font + image origins for faster first paint --> 84 <link rel="preconnect" href="https://fonts.googleapis.com" /> 85 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 86 <link rel="dns-prefetch" href="https://fonts.gstatic.com" /> 87 88 <!-- Preload LCP hero image (responsive AVIF) --> 89 <link 90 rel="preload" 91 as="image" 92 href="/hero/counselling-room-1152.avif" 93 imagesrcset="/hero/counselling-room-768.avif 768w, /hero/counselling-room-1152.avif 1152w" 94 imagesizes="(max-width: 768px) 100vw, 50vw" 95 type="image/avif" 96 fetchpriority="high" 97 /> 98 99 <!-- Fonts: stylesheet preload pattern with swap to avoid blocking render --> 100 <link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=Fira+Sans:wght@400;500;600&family=Oswald:wght@400;500;600;700&family=Cormorant+Garamond:wght@400;500;600&family=Inter:wght@400;500;600;700&display=swap" /> 101 <link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=Fira+Sans:wght@400;500;600&family=Oswald:wght@400;500;600;700&family=Cormorant+Garamond:wght@400;500;600&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'" /> 102 <noscript><link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=Fira+Sans:wght@400;500;600&family=Oswald:wght@400;500;600;700&family=Cormorant+Garamond:wght@400;500;600&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" /></noscript> 103 104 <meta property="og:type" content="website" /> 105 <meta property="og:url" content="https://web.olivebranch.com.sg/" /> 106 <meta property="og:site_name" content="Olive Branch" /> 107 <meta property="og:locale" content="en_SG" /> 108 <meta name="twitter:card" content="summary_large_image" /> 109 <meta property="og:title" content="Olive Branch â Singapore Counselling for Every Season of Life"> 110 <meta name="twitter:title" content="Olive Branch â Singapore Counselling for Every Season of Life"> 111 <meta property="og:description" content="Confidential counselling in Singapore for adults, couples, teens and children. Open 9amâ10pm, 7 days. Speak to a SAC-registered therapist today."> 112 <meta name="twitter:description" content="Confidential counselling in Singapore for adults, couples, teens and children. Open 9amâ10pm, 7 days. Speak to a SAC-registered therapist today."> 113 <!-- og:image intentionally omitted sitewide; per-route Helmet supplies it where available --> 114 115 <!-- EC-WEB-001: domain-aware head. The static head above defaults to Olive 116 Branch. On the Executive Clarity host, correct the brand identity 117 (title, description, author, OG/Twitter, canonical) in the FIRST HTML 118 response, before React mounts, so the document never identifies itself 119 as Olive Branch. Other domains are untouched. --> 120
120<script> 121 (function () { 122 try { 123 var host = (location.hostname || '').toLowerCase(); 124 if (host.indexOf('executiveclarity') === -1) return; 125 var origin = 'https://executiveclarity.coach'; 126 var brand = 'Executive Clarity'; 127 var title = 'Executive Clarity | Neurorelational Leadership for Executives'; 128 var desc = 129 'Psychologist-led assessment, coaching and executive development for C-suite executives, senior leaders and leadership teams.'; 130 var canonicalUrl = function () { 131 var path = location.pathname || '/'; 132 return origin + (path.length > 1 ? path.replace(/\/+$/, '') : '/'); 133 }; 134 // Apply to EVERY matching tag, not just the first: the hosting layer 135 // appends a second, project-level (Olive Branch) metadata block after 136 // this script, so duplicates must be corrected or removed as well. 137 var setAll = function (selector, value) { 138 var nodes = document.querySelectorAll(selector); 139 // react-helmet owns the per-page value; when it has supplied one, 140 // drop the host-injected duplicate instead of leaving two tags. 141 var helmetOwns = !!document.querySelector(selector + '[data-rh]'); 142 for (var i = 0; i < nodes.length; i++) { 143 var el = nodes[i]; 144 if (el.getAttribute('data-rh')) continue; 145 if (helmetOwns) { 146 if (el.parentNode) el.parentNode.removeChild(el); 147 } else { 148 el.setAttribute('content', value); 149 } 150 } 151 }; 152 var apply = function () { 153 var canonical = canonicalUrl(); 154 if (document.title !== title && document.title.toLowerCase().indexOf('olive branch') !== -1) { 155 document.title = title; 156 } 157 setAll('meta[name="description"]', desc); 158 setAll('meta[name="author"]', brand); 159 setAll('meta[name="theme-color"]', '#0B1F3A'); 160 setAll('meta[property="og:site_name"]', brand); 161 setAll('meta[property="og:title"]', title); 162 setAll('meta[property="og:description"]', desc); 163 setAll('meta[property="og:url"]', canonical); 164 setAll('meta[name="twitter:title"]', title); 165 setAll('meta[name="twitter:description"]', desc); 166 var links = document.querySelectorAll('link[rel="canonical"]'); 167 var hasHelmetCanonical = !!document.querySelector('link[rel="canonical"][data-rh]'); 168 for (var i = 0; i < links.length; i++) { 169 var l = links[i]; 170 if (l.getAttribute('data-rh')) continue; 171 if (hasHelmetCanonical) { 172 // exactly one canonical per page, owned by react-helmet 173 if (l.parentNode) l.parentNode.removeChild(l); 174 continue; 175 } 176 var href = l.getAttribute('href') || ''; 177 if (href.indexOf(origin) !== 0) l.setAttribute('href', canonical); 178 } 179 }; 180 apply(); 181 document.write( 182 '' 183 ); 184 document.addEventListener('DOMContentLoaded', apply); 185 window.addEventListener('load', apply); 186 // react-helmet writes its per-page tags after hydration and after 187 // client-side navigation: re-run the sweep whenever the head changes 188 // so a host-injected duplicate never outlives the per-page tag. 189 if (window.MutationObserver) { 190 var scheduled = false; 191 var observer = new MutationObserver(function () { 192 if (scheduled) return; 193 scheduled = true; 194 setTimeout(function () { scheduled = false; apply(); }, 120); 195 }); 196 var startObserving = function () { 197 if (document.head) observer.observe(document.head, { childList: true, subtree: true }); 198 }; 199 startObserving(); 200 document.addEventListener('DOMContentLoaded', startObserving); 201 } 202 } catch (e) { /* keep the static defaults */ } 203 })(); 204 </script>
204 205 206 207 <!-- Google Analytics + Google Ads â deferred until after first load to protect LCP/INP --> 208
208<script> 209 window.dataLayer = window.dataLayer || []; 210 function gtag(){dataLayer.push(arguments);} 211 window.addEventListener('load', function () { 212 var s = document.createElement('script'); 213 s.async = true; 214 s.src = 'https://www.googletagmanager.com/gtag/js?id=G-BCTDZC3T5F'; 215 document.head.appendChild(s); 216 gtag('js', new Date()); 217 gtag('config', 'G-BCTDZC3T5F'); 218 gtag('config', 'AW-17829069922'); 219 }); 220 </script>
220 221 222
222<script type="module" crossorigin src="/assets/index-rOX5Rmnz.js"></script>
222 223 <link rel="modulepreload" crossorigin href="/assets/react-vendor-DKK5h-4S.js"> 224 <link rel="modulepreload" crossorigin href="/assets/query-BddnajNh.js"> 225 <link rel="modulepreload" crossorigin href="/assets/router-CKFl4ZoT.js"> 226 <link rel="modulepreload" crossorigin href="/assets/supabase-CJoCJpoI.js"> 227 <link rel="modulepreload" crossorigin href="/assets/ui-extras-CIMz-jDr.js"> 228 <link rel="modulepreload" crossorigin href="/assets/radix-DQ8yzr2B.js"> 229 <link rel="modulepreload" crossorigin href="/assets/icons-CoEihuPy.js"> 230 <link rel="modulepreload" crossorigin href="/assets/forms-DGqSpeMD.js"> 231 <link rel="stylesheet" crossorigin href="/assets/index-Ct8e2fyc.css"> 232 <title>Counselling & Psychology Singapore | Olive Branch</title> 233 <meta name="description" content="Confidential counselling and psychology support in Singapore for adults, couples, parents, teens and children. Explore counselling, assessments and professional support from Olive Branch."> 234 <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1"> 235 <link rel="canonical" href="https://web.olivebranch.com.sg/"> 236 <meta property="og:type" content="website"> 237 <meta property="og:title" content="Counselling & Psychology Singapore | Olive Branch"> 238 <meta property="og:description" content="Confidential counselling and psychology support in Singapore for adults, couples, parents, teens and children. Explore counselling, assessments and professional support from Olive Branch."> 239 <meta property="og:url" content="https://web.olivebranch.com.sg/"> 240 <meta name="twitter:card" content="summary_large_image"> 241 <meta name="twitter:title" content="Counselling & Psychology Singapore | Olive Branch"> 242 <meta name="twitter:description" content="Confidential counselling and psychology support in Singapore for adults, couples, parents, teens and children. Explore counselling, assessments and professional support from Olive Branch."> 243
243<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Olive Branch Counselling","url":"https://web.olivebranch.com.sg","description":"Confidential counselling and psychology support in Singapore for adults, couples, parents, teens and children. Explore counselling, assessments and professional support from Olive Branch."}</script>
243 244
244<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://web.olivebranch.com.sg/"}]}</script>
244 245 <style id="seo-prerender-style">[data-seo-prerender]{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}</style> 246
246<script defer src="/~flock.js" data-proxy-url="/~api/analytics"></script>
246<meta property="og:image" content="https://pub-bb2e103a32db4e198524a2e9ed8f35b4.r2.dev/c4613285-8674-4d56-87b1-9daa0cc67dc9/id-preview-d0cfe1f9--69c0fbf1-a805-49e1-beda-ae80e4e01794.lovable.app-1777204964423.png"><meta name="twitter:image" content="https://pub-bb2e103a32db4e198524a2e9ed8f35b4.r2.dev/c4613285-8674-4d56-87b1-9daa0cc67dc9/id-preview-d0cfe1f9--69c0fbf1-a805-49e1-beda-ae80e4e01794.lovable.app-1777204964423.png"></head> 247 <body> 248 <!-- Google Tag Manager (noscript) -->
vendor: 87 bytes, lines 248-251
248 249 <noscript 250 ><iframe 251 src="https://www.googletagmanager.com/ns.html?id=
251GTM-TBB636SB
vendor: 126 bytes, lines 251-257
251" 252 height="0" 253 width="0" 254 style="display: none; visibility: hidden" 255 ></iframe 256 ></noscript> 257
257<!-- End Google Tag Manager (noscript) --> 258 <main id="seo-content" data-seo-prerender="commercial"> 259 <h1>Counselling and psychology support in Singapore</h1> 260 <p>Olive Branch is a Singapore counselling and psychology practice supporting adults, couples, families, teenagers and children. Our therapists work with anxiety, low mood, stress and burnout, grief, relationship difficulties, parenting pressure and major life transitions, in person at CT Hub and online.</p> 261 <section> 262 <h2>Support matched to what you are facing</h2> 263 <p>Every enquiry starts with a conversation about what is actually happening, not a package. From there we match you with a therapist whose training fits your situation, whether that is individual therapy, couples work, family sessions or child-focused support.</p> 264 </section> 265 <section> 266 <h2>Start with a self-assessment if you are unsure</h2> 267 <p>If you are still working out what kind of help you need, our free self-assessments give you a structured way to describe your experience. They are for reflection and orientation only and never produce a diagnosis.</p> 268 </section> 269 <nav aria-label="Related pages"> 270 <ul> 271 <li><a href="/services">Browse our counselling services</a></li> 272 <li><a href="/we-serve">See who we support</a></li> 273 <li><a href="/assessment/tests">Explore our self-assessments</a></li> 274 <li><a href="/our-team">Meet our therapists</a></li> 275 </ul> 276 </nav> 277 <p><a href="/appointments">Book a confidential appointment</a></p> 278 </main> 279 <div id="root"></div> 280 </body> 281</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.