PageSourceSearch

https://web.olivebranch.com.sg/

html olivebranch.com.sg collected 2026-09-30 20:06:55 UTC 17,053 bytes, 281 lines download raw bytes

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 &amp; 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 &amp; 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 &amp; 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.