# Hospital Google Ads Indonesia: Cut Patient Acquisition Cost

> Skip to content ADTYAATechnology &amp; Digital Systems Capabilities Expertise Approach Proof About Essentials ENID中文 Consultation Capabilities Expertise Approach Proof About Essentials Consultation Home/Hospital Google Ads Indonesia Hospital Google Ads Indonesia:A Patient Acquisition Playbook From Click to Booked Consultation By Adtyaa10

- URL: https://medikabyte.com/hospital-google-ads-indonesia/
- Diperbarui: 2026-10-16
- Penulis: MedikaByte
- Penerbit: MedikaByte (B2B digital agency)

Skip to content

[**ADTYAA** Technology & Digital Systems](https://medikabyte.com/)

**EN**

**ID**

**中文**

Consultation

[Capabilities](https://medikabyte.com/#capabilities)
[Expertise](https://medikabyte.com/#expertise)
[Approach](https://medikabyte.com/#approach)
[Proof](https://medikabyte.com/#proof)
[About](https://medikabyte.com/#about)
[Essentials](https://medikabyte.com/essentials/)
Consultation

# Hospital Google Ads Indonesia: *A Patient Acquisition Playbook From Click to Booked Consultation*

By Adtyaa 10 October 2026 8 min read

Hospital Google Ads Indonesia campaigns fail for a simple reason: the click is cheap to buy and expensive to waste. A hospital pays for every search, but it only earns from the patients who book. Between those two points sit policy limits, weak landing pages, slow load times, and a handoff nobody measures. This guide shows how I connect ads, the website, and organic search so every rupiah spent becomes a booked consultation.

**The short version**

Hospital Google Ads Indonesia works when four things line up: compliant campaigns built on patient intent, a landing page designed to convert, a site fast enough to protect Quality Score, and organic content that lowers your blended acquisition cost.

![Hospital Google Ads Indonesia: marketer reviewing a hospital landing page on a laptop](https://medikabyte.com/wp-content/uploads/2026/10/hospital-Google-Ads-Indonesia.jpg)

The landing page is where an ad budget is either recovered or lost.

## Hospital Google Ads Indonesia: why budgets leak before the click

Healthcare is a restricted category. The [Google Ads healthcare and medicines policy](https://support.google.com/adspolicy/answer/176031) limits what you can promote, how you can describe it, and who you can target, and a disapproved ad costs time even when it costs no money. Beyond policy, these are the leaks I find most often:

- Broad keywords that attract symptom research, job seekers, and students instead of patients ready to book.
- No negative keyword list, so spend drifts to free clinics, home remedies, and unrelated queries.
- One campaign for every specialty, which hides which service actually produces patients.
- Ads that promise more than the landing page can prove.
- Conversion tracking that counts page views, not WhatsApp conversations or booked consultations.

Fixing these is the fastest way to recover budget, because it needs no new creative.

## Patient acquisition cost Indonesia: measure the whole ledger

The patient acquisition cost Indonesia hospitals report is often cost per click divided by hope. A usable figure follows the patient from the ad to the treatment room. I track five layers:

| Metric | How it is calculated | What it tells you |
| --- | --- | --- |
| Cost per click | Ad spend divided by clicks | How expensive the auction is |
| Cost per conversation | Ad spend divided by WhatsApp conversations and calls | How well the page persuades |
| Cost per booked consultation | Ad spend divided by confirmed appointments | How well enquiries are answered |
| Cost per treated patient | Ad spend plus agency and tool costs, divided by patients who attend | The true patient acquisition cost |
| Return by service line | Revenue from attributed patients divided by total cost | Where to spend more, or stop |

The gap between the second and third rows is where many hospitals discover the problem is not the hospital Google Ads Indonesia setup at all, but how fast and how well enquiries are answered.

## Campaign structure: match each ad to a patient’s intent

I build hospital Google Ads Indonesia accounts around intent tiers, not around the hospital’s org chart. Each tier gets its own keywords, ads, landing page, and bid stance.

| Tier | Example search | Landing page | Approach |
| --- | --- | --- | --- |
| Ready to book | “dokter spesialis jantung Jakarta” | Doctor and appointment page | Highest bids, tightest match types |
| Comparing options | “biaya operasi katarak” | Treatment page with a price range | Moderate bids, strong proof |
| Researching | “gejala diabetes” | Doctor-reviewed educational article | Leave to organic search |
| Brand | The hospital’s own name | Home page or doctor page | Low bids, protect against competitors |

Notice the third tier: informational searches are better served by doctor-reviewed organic content, which costs nothing per click. Splitting the work this way is the simplest route to a lower blended acquisition cost. I also keep emergency-care keywords out of paid campaigns unless the hospital can answer instantly at every hour.

## Hospital website UX conversion: design the page that follows the click

Hospital website UX conversion decides whether the money spent on hospital Google Ads Indonesia clicks is recovered. A patient arriving from an ad has one question: can I trust this place, and how do I reach them? The page should answer both above the fold.

1. A headline that repeats the searched service in the patient’s own words.
2. A doctor card with name, specialty, and credentials.
3. A one-tap WhatsApp button and a click-to-call number that stay visible while scrolling.
4. A short form that asks only for name, phone, and the reason for the visit.
5. Plain proof: accreditation, years of practice, and verified reviews, not stock photos.
6. A clear statement of what happens after the message is sent, including response time.

I test these elements one at a time and report the result in cost per conversation, so every change is judged by money, not opinion.

### Want your hospital landing page reviewed?

Send me your website and your three most profitable services. I reply within 24 hours with initial findings.

[Request a hospital Google Ads audit](https://wa.me/6281411188809) Send a project brief

## Healthcare website speed optimization protects both Quality Score and patients

Healthcare website speed optimization has a direct line to ad cost, because Google considers landing page experience when it scores your ads, and slow pages lose visitors before they convert. Google’s guidance on [Core Web Vitals](https://web.dev/articles/vitals) sets the benchmarks I work to:

- Largest Contentful Paint under 2.5 seconds on mobile.
- Interaction to Next Paint under 200 milliseconds.
- Cumulative Layout Shift under 0.1.
- Dedicated lightweight landing pages for paid traffic, not the heaviest page on the site.
- Tracking tags loaded after the page is usable.

In any hospital Google Ads Indonesia account, speed is the one investment that lifts both channels at once: paid pages convert better and organic pages rank better.

## B2B healthcare content marketing: win the buyers who never search for a doctor

Not every valuable audience is a patient. Hospitals also win business from corporate HR teams, insurers, referring doctors, and medical partners, and these buyers do not click patient ads. B2B healthcare content marketing reaches them with material built for a business decision.

| Audience | What they need | Content I build |
| --- | --- | --- |
| Corporate HR and benefits teams | Employee health programmes and cost control | Corporate health package pages and a programme overview |
| Insurers and TPAs | Proof of quality and transparent pricing | Accreditation, quality methodology, and price-list pages |
| Referring doctors | Confidence in handover and communication | Specialist profiles and a referral guide |
| Medical suppliers and partners | A credible, well-documented counterpart | Company profile, capability pages, and case summaries |

This content also earns links and authority, which strengthens the organic side of the programme.

## Ads and SEO together: lower the blended cost of every patient

Paid search buys visibility this month, and organic search compounds. For hospital Google Ads Indonesia programmes I plan them as one system, using ad data to find the terms that convert and SEO to capture the same demand without paying per click. My [medical SEO agency Indonesia](https://medikabyte.com/medical-seo-agency-indonesia/) playbook and the guide on [how to attract Indonesian medical tourists](https://medikabyte.com/how-to-attract-indonesian-medical-tourists/) apply the same logic to organic growth.

| Channel | Strength | Role in the plan |
| --- | --- | --- |
| Google Ads | Speed and control | Capture ready-to-book demand now |
| SEO | Compounding, low marginal cost | Own the research and comparison searches |
| Website | Conversion and trust | Turn both channels into conversations |
| Measurement | One ledger across channels | Report cost per treated patient |

Packaged services and care plans are listed in [ADTYAA Essentials](https://medikabyte.com/essentials/), the [capabilities](https://medikabyte.com/#capabilities) show the engineering behind the work, and the [approach](https://medikabyte.com/#approach) explains how an engagement runs.

## Hospital Google Ads Indonesia: common questions

**How much should a hospital spend on Google Ads?**

It depends on the service line, competition, and the value of a treated patient. I start from the revenue a service line can support, set a test budget, and scale only the campaigns whose cost per treated patient is acceptable.

**Can hospitals advertise every treatment on Google?**

No. Healthcare is a restricted category, and some treatments, claims, and targeting options are limited. I review each campaign against Google’s policy and Indonesian health advertising rules before launch.

**Should we run ads or invest in SEO first?**

Usually both, in sequence. Ads capture ready-to-book demand quickly, and SEO builds the lower-cost base that carries the programme afterwards.

**Will you guarantee a patient acquisition cost?**

No honest agency can guarantee a market price. I commit to a defined scope, clean tracking, and monthly reporting of cost per conversation, booked consultation, and treated patient.

If you want hospital Google Ads Indonesia campaigns that report cost per treated patient, not cost per click, start with an audit. I review your account, landing pages, and tracking, and reply with initial findings and a proposed scope within 24 hours.

### Ready to lower your patient acquisition cost?

Message me on WhatsApp or send a brief. Your details stay private, and you receive a written reply within 24 hours.

[Request a hospital Google Ads audit](https://wa.me/6281411188809) Send a project brief

Project brief

## Share your requirement.

Describe what you are building, what is not performing, or what needs to improve. I will review the brief and respond within 24 hours.

WhatsApp / Phone [0814 111 888 09](tel:+6281411188809)

Email [hallo@adtyaa.cloud](mailto:hallo@adtyaa.cloud)

Base **Jakarta, Indonesia**

Location

## Find us on Google Maps.

In-person meetings are by appointment. Please message first so a time can be confirmed.

### DJURAGAN IKLAN ID

Founded by ADTYAA

Jl. Green Pramuka City No.9 13, RT.13/RW.9, Rawasari, Kec. Cempaka Putih, Kota Jakarta Pusat, DKI Jakarta 10570

#### Opening hours

Mon, Wed to Sat 08:00 – 21:30

Tuesday 08:00 – 21:00

Sunday 09:00 – 21:30

[Get directions](https://www.google.com/maps/dir/?api=1&destination=-6.1883766,106.8732792&destination_place_id=ChIJKcjnOqb1aS4RfbYD_EKMv84)
[Chat on WhatsApp](https://wa.me/6281411188809)
[Call now](tel:+6281411188809)

Build what your business depends on.

## Let’s build something worth depending on.

One accountable technology partner across engineering, growth, security, and digital infrastructure.

Request a consultation [Explore capabilities](https://medikabyte.com/#capabilities)

[**ADTYAA**](https://medikabyte.com/)

Digital Systems & Technology Consultancy

Aditya

Founder & Technology Strategist

Djuragan Iklan

Navigate

- [Capabilities](https://medikabyte.com/#capabilities)
- [Expertise](https://medikabyte.com/#expertise)
- [Approach](https://medikabyte.com/#approach)
- [About](https://medikabyte.com/#about)
- Location
- Contact

Capabilities

- [Software Engineering](https://medikabyte.com/#capabilities)
- [Digital Engineering](https://medikabyte.com/#capabilities)
- [Growth Systems](https://medikabyte.com/#capabilities)
- [Security & Infrastructure](https://medikabyte.com/#capabilities)
- [Medical SEO](https://medikabyte.com/#medical)
- [Custom Plugins](https://medikabyte.com/essentials/)
- [Custom Themes](https://medikabyte.com/essentials/)
- [Add-ons & Care Plans](https://medikabyte.com/essentials/)

Contact

[WhatsApp](https://wa.me/6281411188809)
[hallo@adtyaa.cloud](mailto:hallo@adtyaa.cloud)
Jakarta, Indonesia

ADTYAA

© 2026 ADTYAA. All rights reserved.

[Essentials](https://medikabyte.com/essentials/)

[Chat on WhatsApp](https://wa.me/6281411188809)

var D = {"skip":["Skip to content","Lewati ke konten","跳到主要内容"],"menu":["Menu","Menu","菜单"],"lang.group":["Language","Bahasa","语言"],"nav.cap":["Capabilities","Keahlian","核心能力"],"nav.work":["Expertise","Spesialisasi","行业专长"],"nav.app":["Approach","Pendekatan","合作流程"],"nav.proof":["Proof","Bukti","实绩"],"nav.about":["About","Tentang","关于"],"nav.ess":["Essentials","Essentials","Essentials"],"nav.cta":["Consultation","Konsultasi","预约咨询"],"nav.contact":["Contact","Kontak","联系我们"],"bag.aria":["ADTYAA Essentials: services, themes, plugins, and add-ons","ADTYAA Essentials: jasa, tema, plugin, dan add-on","ADTYAA Essentials：服务、主题、插件与附加服务"],"hero.cta1":["Request a consultation","Jadwalkan konsultasi","预约咨询"],"hero.cta2":["Explore capabilities","Jelajahi keahlian","了解核心能力"],"hero.role":["Founder & Technology Strategist","Founder & Technology Strategist","创始人 · 技术战略顾问"],"cap4.title":["Software Engineering","Software Engineering","软件工程"],"cap1.title":["Digital Engineering","Digital Engineering","数字工程"],"cap2.title":["Growth Systems","Growth Systems","增长体系"],"cap3.title":["Security & Infrastructure","Security & Infrastructure","安全与基础设施"],"opt.med":["Medical SEO","SEO Medis","医疗 SEO"],"opt.other":["Other / Not sure yet","Lainnya / Belum yakin","其他 / 尚未确定"],"contact.label":["Project brief","Brief proyek","项目简报"],"contact.title":["Share your requirement.","Sampaikan kebutuhan Anda.","请告诉我们您的需求。"],"contact.copy":["Describe what you are building, what is not performing, or what needs to improve. I will review the brief and respond within 24 hours.","Jelaskan apa yang sedang Anda bangun, apa yang belum berjalan optimal, atau apa yang perlu ditingkatkan. Saya akan mempelajari brief dan merespons dalam 24 jam.","请描述您正在构建的内容、表现不佳之处或需要改进的方面。我会审阅简报并在 24 小时内回复，咨询以英文进行。"],"contact.wa":["WhatsApp / Phone","WhatsApp / Telepon","WhatsApp / 电话"],"contact.loc":["Base","Lokasi","所在地"],"contact.city":["Jakarta, Indonesia","Jakarta, Indonesia","印度尼西亚 · 雅加达"],"form.name":["Name *","Nama *","姓名 *"],"form.email":["Email","Email","邮箱"],"form.wa":["WhatsApp","WhatsApp","WhatsApp"],"form.url":["Website","Website","网站"],"form.service":["Capability *","Keahlian *","所需能力 *"],"form.choose":["Choose a capability","Pilih keahlian","请选择能力方向"],"form.eng":["Engagement","Jenis kerja sama","合作类型"],"form.time":["Timeline","Target waktu","时间安排"],"form.choose2":["Choose one","Pilih salah satu","请选择"],"form.msg":["Project / problem","Proyek / masalah","项目 / 问题"],"form.sendwa":["Send via WhatsApp","Kirim lewat WhatsApp","通过 WhatsApp 发送"],"form.sendmail":["Send via email","Kirim lewat email","通过邮件发送"],"form.note":["Your brief opens in WhatsApp or your email application. Nothing is stored on this page.","Brief Anda terbuka di WhatsApp atau aplikasi email, siap dikirim. Tidak ada data yang disimpan di halaman ini.","您的简报将在 WhatsApp 或邮件应用中打开，供您发送。本页面不会保存任何数据。"],"eng.1":["One-time fix or setup","Perbaikan atau setup sekali jalan","一次性修复或设置"],"eng.2":["Full project","Proyek penuh","完整项目"],"eng.3":["Ongoing monthly support","Dukungan bulanan berkelanjutan","持续月度支持"],"eng.4":["Not sure yet","Belum yakin","尚未确定"],"time.1":["As soon as possible","Secepatnya","尽快"],"time.2":["Within 1 month","Dalam 1 bulan","1 个月内"],"time.3":["Within 3 months","Dalam 3 bulan","3 个月内"],"time.4":["Flexible","Fleksibel","灵活"],"f.err":["Please enter your name and choose a capability first.","Isi nama dan pilih keahlian terlebih dahulu.","请先填写姓名并选择能力方向。"],"f.okwa":["Opening WhatsApp...","Membuka WhatsApp...","正在打开 WhatsApp…"],"f.okmail":["Opening your email application...","Membuka aplikasi email Anda...","正在打开邮件应用…"],"m.name":["Name","Nama","Name"],"m.email":["Email","Email","Email"],"m.wa":["WhatsApp","WhatsApp","WhatsApp"],"m.url":["Website","Website","Website"],"m.service":["Capability","Keahlian","Capability"],"m.eng":["Engagement","Jenis kerja sama","Engagement"],"m.time":["Timeline","Target waktu","Timeline"],"m.msg":["Message","Pesan","Message"],"m.subject":["Project enquiry","Permintaan proyek","Project enquiry"],"loc.label":["Location","Lokasi","地点"],"loc.title":["Find us on Google Maps.","Temukan kami di Google Maps.","在 Google 地图上找到我们。"],"loc.lead":["In-person meetings are by appointment. Please message first so a time can be confirmed.","Pertemuan langsung dengan janji temu. Kirim pesan terlebih dahulu agar waktunya dapat dikonfirmasi.","现场会面需提前预约。请先发送消息以确认时间。"],"loc.founded":["Founded by ADTYAA","Founded by ADTYAA","由 ADTYAA 创立"],"loc.hours":["Opening hours","Jam operasional","营业时间"],"loc.d1":["Mon, Wed to Sat","Sen, Rab sampai Sab","周一、周三至周六"],"loc.d2":["Tuesday","Selasa","周二"],"loc.d3":["Sunday","Minggu","周日"],"loc.dir":["Get directions","Petunjuk arah","获取路线"],"loc.wa":["Chat on WhatsApp","Chat via WhatsApp","通过 WhatsApp 洽谈"],"loc.call":["Call now","Telepon sekarang","立即致电"],"loc.map":["DJURAGAN IKLAN ID on Google Maps","DJURAGAN IKLAN ID di Google Maps","DJURAGAN IKLAN ID 的 Google 地图位置"],"final.label":["Build what your business depends on.","Bangun sistem yang diandalkan bisnis Anda.","构建您的业务所依赖的系统。"],"final.title":["Let's build something worth depending on.","Mari bangun sesuatu yang layak diandalkan.","让我们共同构建值得依赖的系统。"],"final.copy":["One accountable technology partner across engineering, growth, security, and digital infrastructure.","Satu partner teknologi yang akuntabel untuk engineering, growth, keamanan, dan infrastruktur digital.","一个对结果负责的技术合作方，覆盖工程、增长、安全与数字基础设施。"],"foot.nav":["Navigate","Navigasi","导航"],"foot.cap":["Capabilities","Keahlian","核心能力"],"foot.con":["Contact","Kontak","联系"],"foot.plugins":["Custom Plugins","Plugin Kustom","定制插件"],"foot.themes":["Custom Themes","Tema Kustom","定制主题"],"foot.addons":["Add-ons & Care Plans","Add-on & Paket Perawatan","附加服务与维护计划"],"foot.rights":["All rights reserved.","Hak cipta dilindungi.","保留所有权利。"],"dock.group":["Quick contact","Kontak cepat","快速联系"],"dock.wa":["Chat on WhatsApp","Chat via WhatsApp","通过 WhatsApp 洽谈"],"dock.maps":["Open in Google Maps","Buka di Google Maps","在 Google 地图中打开"],"dock.call":["Call now","Telepon sekarang","立即致电"],"a.home":["Home","Beranda","首页"],"a.toc":["In this article","Dalam artikel ini","本文内容"],"a.crumb":["Hospital Google Ads Indonesia","Hospital Google Ads Indonesia"],"a.h1a":["Hospital Google Ads Indonesia:","Hospital Google Ads Indonesia:"],"a.h1b":["A Patient Acquisition Playbook From Click to Booked Consultation","Playbook Akuisisi Pasien dari Klik hingga Konsultasi Terjadwal"],"a.m1":["By Adtyaa","Oleh Adtyaa","作者：Adtyaa"],"a.m2":["10 October 2026","10 Oktober 2026","2026 年 10 月 10 日"],"a.m3":["8 min read","Baca 8 menit","阅读约 8 分钟"],"a.img.alt":["Hospital Google Ads Indonesia: marketer reviewing a hospital landing page on a laptop","Hospital Google Ads Indonesia: pemasar meninjau landing page rumah sakit di laptop"],"a.img.cap":["The landing page is where an ad budget is either recovered or lost.","Landing page adalah tempat anggaran iklan kembali atau hilang."],"cta.b1":["Request a hospital Google Ads audit","Minta audit Google Ads rumah sakit","申请医院谷歌广告审计"],"cta.b2":["Send a project brief","Kirim brief proyek","提交项目简报"],"au.name":["Adtyaa, Founder of [DJURAGAN IKLAN ID<\/a>","Adtyaa, Founder of](https://maps.app.goo.gl/YRw1yaWB5xfHcjwq5) [DJURAGAN IKLAN ID<\/a>","Adtyaa，](https://maps.app.goo.gl/YRw1yaWB5xfHcjwq5) [DJURAGAN IKLAN ID<\/a> 创始人"],"au.bio":["Builds medical websites, healthcare SEO, paid advertising, and conversion systems for hospitals and healthtech brands in Indonesia.","Membangun website medis, SEO kesehatan, iklan berbayar, dan sistem konversi untuk rumah sakit dan brand healthtech di Indonesia."],"au.cta":["Request a hospital Google Ads audit","Minta audit Google Ads rumah sakit","申请医院谷歌广告审计"],"au.alt":["Adtyaa, author of the hospital Google Ads Indonesia guide","Adtyaa, penulis panduan hospital Google Ads Indonesia"],"wa.general":["Hi Adtyaa, I found your guide on hospital Google Ads Indonesia and I'd like to discuss patient acquisition for our hospital.","Hi Adtyaa, I found your guide on hospital Google Ads Indonesia and I'd like to discuss patient acquisition for our hospital.","Hi Adtyaa, I found your guide on hospital Google Ads Indonesia and I'd like to discuss patient acquisition for our hospital."],"wa.article":["Hi Adtyaa, I read your guide on hospital Google Ads Indonesia and I'd like to request a hospital Google Ads audit.","Hi Adtyaa, I read your guide on hospital Google Ads Indonesia and I'd like to request a hospital Google Ads audit.","Hi Adtyaa, I read your guide on hospital Google Ads Indonesia and I'd like to request a hospital Google Ads audit."],"n5":["Hospital Google Ads Indonesia campaigns fail for a simple reason: the click is cheap to buy and expensive to waste. A hospital pays for every search, but it only earns from the patients who book. Between those two points sit policy limits, weak landing pages, slow load times, and a handoff nobody measures. This guide shows how I connect ads, the website, and organic search so every rupiah spent becomes a booked consultation.","Kampanye hospital Google Ads Indonesia gagal karena alasan sederhana: klik murah untuk dibeli dan mahal bila terbuang. Rumah sakit membayar setiap pencarian, tetapi hanya memperoleh pendapatan dari pasien yang benar-benar mendaftar. Di antara keduanya ada batasan kebijakan, landing page yang lemah, waktu muat yang lambat, dan serah terima yang tidak diukur. Panduan ini menunjukkan cara saya menghubungkan iklan, website, dan pencarian organik agar setiap rupiah yang dibelanjakan menjadi konsultasi yang terjadwal."],"n6":["The short version","Ringkasnya"],"n7":["Hospital Google Ads Indonesia works when four things line up: compliant campaigns built on patient intent, a landing page designed to convert, a site fast enough to protect Quality Score, and organic content that lowers your blended acquisition cost.","Hospital Google Ads Indonesia berhasil bila empat hal selaras: kampanye patuh yang dibangun di atas niat pasien, landing page yang dirancang untuk konversi, situs yang cukup cepat untuk menjaga Quality Score, dan konten organik yang menurunkan biaya akuisisi gabungan Anda."],"n8":["Hospital Google Ads Indonesia: why budgets leak before the click","Hospital Google Ads Indonesia: mengapa anggaran bocor sebelum klik"],"n9":["Healthcare is a restricted category. The](https://maps.app.goo.gl/YRw1yaWB5xfHcjwq5) [Google Ads healthcare and medicines policy<\/a> limits what you can promote, how you can describe it, and who you can target, and a disapproved ad costs time even when it costs no money. Beyond policy, these are the leaks I find most often:","Layanan kesehatan adalah kategori terbatas.](https://support.google.com/adspolicy/answer/176031) [Kebijakan Google Ads untuk layanan kesehatan dan obat-obatan<\/a> membatasi apa yang boleh dipromosikan, bagaimana menjelaskannya, dan siapa yang boleh ditarget, dan iklan yang ditolak memakan waktu meski tidak memakan biaya. Di luar kebijakan, inilah kebocoran yang paling sering saya temukan:"],"n10":["Broad keywords that attract symptom research, job seekers, and students instead of patients ready to book.","Kata kunci luas yang menarik pencari gejala, pencari kerja, dan mahasiswa, bukan pasien yang siap mendaftar."],"n11":["No negative keyword list, so spend drifts to free clinics, home remedies, and unrelated queries.","Tanpa daftar kata kunci negatif, sehingga anggaran mengalir ke klinik gratis, obat rumahan, dan kueri tak relevan."],"n12":["One campaign for every specialty, which hides which service actually produces patients.","Satu kampanye untuk semua spesialisasi, yang menyembunyikan layanan mana yang benar-benar menghasilkan pasien."],"n13":["Ads that promise more than the landing page can prove.","Iklan yang menjanjikan lebih banyak daripada yang dapat dibuktikan landing page."],"n14":["Conversion tracking that counts page views, not WhatsApp conversations or booked consultations.","Pelacakan konversi yang menghitung tampilan halaman, bukan percakapan WhatsApp atau konsultasi terjadwal."],"n15":["Fixing these is the fastest way to recover budget, because it needs no new creative.","Memperbaiki hal-hal ini adalah cara tercepat memulihkan anggaran, karena tidak membutuhkan materi kreatif baru."],"n16":["Patient acquisition cost Indonesia: measure the whole ledger","Patient acquisition cost Indonesia: ukur seluruh bukunya"],"n17":["The patient acquisition cost Indonesia hospitals report is often cost per click divided by hope. A usable figure follows the patient from the ad to the treatment room. I track five layers:","Patient acquisition cost Indonesia yang dilaporkan banyak rumah sakit sering kali hanya biaya per klik dibagi harapan. Angka yang berguna mengikuti pasien dari iklan hingga ruang perawatan. Saya melacak lima lapisan:"],"n18":["The acquisition cost ledger","Buku biaya akuisisi"],"n19":["Metric","Metrik"],"n20":["How it is calculated","Cara menghitung"],"n21":["What it tells you","Yang ditunjukkannya"],"n22":["Cost per click","Biaya per klik"],"n23":["Ad spend divided by clicks","Belanja iklan dibagi klik"],"n24":["How expensive the auction is","Seberapa mahal lelangnya"],"n25":["Cost per conversation","Biaya per percakapan"],"n26":["Ad spend divided by WhatsApp conversations and calls","Belanja iklan dibagi percakapan WhatsApp dan panggilan"],"n27":["How well the page persuades","Seberapa persuasif halamannya"],"n28":["Cost per booked consultation","Biaya per konsultasi terjadwal"],"n29":["Ad spend divided by confirmed appointments","Belanja iklan dibagi janji temu terkonfirmasi"],"n30":["How well enquiries are answered","Seberapa baik pertanyaan dijawab"],"n31":["Cost per treated patient","Biaya per pasien yang dirawat"],"n32":["Ad spend plus agency and tool costs, divided by patients who attend","Belanja iklan ditambah biaya agensi dan alat, dibagi pasien yang hadir"],"n33":["The true patient acquisition cost","Biaya akuisisi pasien yang sebenarnya"],"n34":["Return by service line","Imbal hasil per lini layanan"],"n35":["Revenue from attributed patients divided by total cost","Pendapatan dari pasien teratribusi dibagi total biaya"],"n36":["Where to spend more, or stop","Di mana menambah anggaran, atau berhenti"],"n37":["The gap between the second and third rows is where many hospitals discover the problem is not the hospital Google Ads Indonesia setup at all, but how fast and how well enquiries are answered.","Selisih antara baris kedua dan ketiga adalah tempat banyak rumah sakit menyadari bahwa masalahnya bukan pengaturan hospital Google Ads Indonesia sama sekali, melainkan seberapa cepat dan baik pertanyaan dijawab."],"n38":["Campaign structure: match each ad to a patient's intent","Struktur kampanye: cocokkan setiap iklan dengan niat pasien"],"n39":["I build hospital Google Ads Indonesia accounts around intent tiers, not around the hospital's org chart. Each tier gets its own keywords, ads, landing page, and bid stance.","Saya membangun akun hospital Google Ads Indonesia berdasarkan tingkat niat, bukan bagan organisasi rumah sakit. Setiap tingkat mendapat kata kunci, iklan, landing page, dan sikap tawaran sendiri."],"n40":["Intent tiers for a hospital account","Tingkat niat untuk akun rumah sakit"],"n41":["Tier","Tingkat"],"n42":["Example search","Contoh pencarian"],"n43":["Landing page","Landing page"],"n44":["Approach","Pendekatan"],"n45":["Ready to book","Siap mendaftar"],"n46":["\"dokter spesialis jantung Jakarta\"","\"dokter spesialis jantung Jakarta\""],"n47":["Doctor and appointment page","Halaman dokter dan janji temu"],"n48":["Highest bids, tightest match types","Tawaran tertinggi, jenis pencocokan paling ketat"],"n49":["Comparing options","Membandingkan pilihan"],"n50":["\"biaya operasi katarak\"","\"biaya operasi katarak\""],"n51":["Treatment page with a price range","Halaman tindakan dengan kisaran harga"],"n52":["Moderate bids, strong proof","Tawaran sedang, bukti kuat"],"n53":["Researching","Mencari informasi"],"n54":["\"gejala diabetes\"","\"gejala diabetes\""],"n55":["Doctor-reviewed educational article","Artikel edukasi yang ditinjau dokter"],"n56":["Leave to organic search","Serahkan ke pencarian organik"],"n57":["Brand","Merek"],"n58":["The hospital's own name","Nama rumah sakit itu sendiri"],"n59":["Home page or doctor page","Beranda atau halaman dokter"],"n60":["Low bids, protect against competitors","Tawaran rendah, lindungi dari pesaing"],"n61":["Notice the third tier: informational searches are better served by doctor-reviewed organic content, which costs nothing per click. Splitting the work this way is the simplest route to a lower blended acquisition cost. I also keep emergency-care keywords out of paid campaigns unless the hospital can answer instantly at every hour.","Perhatikan tingkat ketiga: pencarian informasional lebih baik dilayani konten organik yang ditinjau dokter, yang tidak memakan biaya per klik. Membagi pekerjaan seperti ini adalah jalan paling sederhana menuju biaya akuisisi gabungan yang lebih rendah. Saya juga tidak memasukkan kata kunci perawatan darurat ke kampanye berbayar kecuali rumah sakit dapat menjawab seketika pada setiap jam."],"n62":["Want your hospital landing page reviewed?","Ingin landing page rumah sakit Anda ditinjau?"],"n63":["Send me your website and your three most profitable services. I reply within 24 hours with initial findings.","Kirimkan website Anda dan tiga layanan paling menguntungkan. Saya membalas dalam 24 jam dengan temuan awal."],"n64":["Hospital website UX conversion: design the page that follows the click","Hospital website UX conversion: rancang halaman setelah klik"],"n65":["Hospital website UX conversion decides whether the money spent on hospital Google Ads Indonesia clicks is recovered. A patient arriving from an ad has one question: can I trust this place, and how do I reach them? The page should answer both above the fold.","Hospital website UX conversion menentukan apakah uang yang dibelanjakan untuk klik hospital Google Ads Indonesia kembali. Pasien yang datang dari iklan hanya punya satu pertanyaan: bisakah saya memercayai tempat ini, dan bagaimana menghubungi mereka? Halaman harus menjawab keduanya di layar pertama."],"n66":["A headline that repeats the searched service in the patient's own words.","Judul yang mengulang layanan yang dicari dengan kata-kata pasien sendiri."],"n67":["A doctor card with name, specialty, and credentials.","Kartu dokter dengan nama, spesialisasi, dan kredensial."],"n68":["A one-tap WhatsApp button and a click-to-call number that stay visible while scrolling.","Tombol WhatsApp satu ketukan dan nomor telepon yang tetap terlihat saat menggulir."],"n69":["A short form that asks only for name, phone, and the reason for the visit.","Formulir singkat yang hanya meminta nama, telepon, dan alasan kunjungan."],"n70":["Plain proof: accreditation, years of practice, and verified reviews, not stock photos.","Bukti yang jelas: akreditasi, lama praktik, dan ulasan terverifikasi, bukan foto stok."],"n71":["A clear statement of what happens after the message is sent, including response time.","Pernyataan jelas tentang apa yang terjadi setelah pesan dikirim, termasuk waktu respons."],"n72":["I test these elements one at a time and report the result in cost per conversation, so every change is judged by money, not opinion.","Saya menguji elemen-elemen ini satu per satu dan melaporkan hasilnya dalam biaya per percakapan, sehingga setiap perubahan dinilai dari uang, bukan opini."],"n73":["Healthcare website speed optimization protects both Quality Score and patients","Healthcare website speed optimization melindungi Quality Score sekaligus pasien"],"n74":["Healthcare website speed optimization has a direct line to ad cost, because Google considers landing page experience when it scores your ads, and slow pages lose visitors before they convert. Google's guidance on](https://support.google.com/adspolicy/answer/176031) [Core Web Vitals<\/a> sets the benchmarks I work to:","Healthcare website speed optimization berkaitan langsung dengan biaya iklan, karena Google mempertimbangkan pengalaman landing page saat menilai iklan Anda, dan halaman lambat kehilangan pengunjung sebelum mereka berkonversi. Panduan Google tentang](https://web.dev/articles/vitals) [Core Web Vitals<\/a> menjadi tolok ukur yang saya kejar:"],"n75":["Largest Contentful Paint under 2.5 seconds on mobile.","Largest Contentful Paint di bawah 2,5 detik pada seluler."],"n76":["Interaction to Next Paint under 200 milliseconds.","Interaction to Next Paint di bawah 200 milidetik."],"n77":["Cumulative Layout Shift under 0.1.","Cumulative Layout Shift di bawah 0,1."],"n78":["Dedicated lightweight landing pages for paid traffic, not the heaviest page on the site.","Landing page ringan khusus untuk lalu lintas berbayar, bukan halaman terberat di situs."],"n79":["Tracking tags loaded after the page is usable.","Tag pelacakan dimuat setelah halaman dapat digunakan."],"n80":["In any hospital Google Ads Indonesia account, speed is the one investment that lifts both channels at once: paid pages convert better and organic pages rank better.","Dalam akun hospital Google Ads Indonesia mana pun, kecepatan adalah satu investasi yang mengangkat kedua kanal sekaligus: halaman berbayar berkonversi lebih baik dan halaman organik berperingkat lebih baik."],"n81":["B2B healthcare content marketing: win the buyers who never search for a doctor","B2B healthcare content marketing: raih pembeli yang tidak pernah mencari dokter"],"n82":["Not every valuable audience is a patient. Hospitals also win business from corporate HR teams, insurers, referring doctors, and medical partners, and these buyers do not click patient ads. B2B healthcare content marketing reaches them with material built for a business decision.","Tidak semua audiens bernilai adalah pasien. Rumah sakit juga memperoleh bisnis dari tim HR perusahaan, perusahaan asuransi, dokter perujuk, dan mitra medis, dan para pembeli ini tidak mengeklik iklan pasien. B2B healthcare content marketing menjangkau mereka dengan materi yang dibuat untuk keputusan bisnis."],"n83":["Content for business buyers","Konten untuk pembeli bisnis"],"n84":["Audience","Audiens"],"n85":["What they need","Kebutuhan mereka"],"n86":["Content I build","Konten yang saya buat"],"n87":["Corporate HR and benefits teams","Tim HR dan benefit perusahaan"],"n88":["Employee health programmes and cost control","Program kesehatan karyawan dan pengendalian biaya"],"n89":["Corporate health package pages and a programme overview","Halaman paket kesehatan korporat dan ringkasan program"],"n90":["Insurers and TPAs","Asuransi dan TPA"],"n91":["Proof of quality and transparent pricing","Bukti mutu dan harga yang transparan"],"n92":["Accreditation, quality methodology, and price-list pages","Akreditasi, metodologi mutu, dan halaman daftar harga"],"n93":["Referring doctors","Dokter perujuk"],"n94":["Confidence in handover and communication","Keyakinan pada serah terima dan komunikasi"],"n95":["Specialist profiles and a referral guide","Profil spesialis dan panduan rujukan"],"n96":["Medical suppliers and partners","Pemasok dan mitra medis"],"n97":["A credible, well-documented counterpart","Mitra yang kredibel dan terdokumentasi baik"],"n98":["Company profile, capability pages, and case summaries","Profil perusahaan, halaman kapabilitas, dan ringkasan kasus"],"n99":["This content also earns links and authority, which strengthens the organic side of the programme.","Konten ini juga mendatangkan tautan dan otoritas, yang memperkuat sisi organik program."],"n100":["Ads and SEO together: lower the blended cost of every patient","Iklan dan SEO bersama: turunkan biaya gabungan setiap pasien"],"n101":["Paid search buys visibility this month, and organic search compounds. For hospital Google Ads Indonesia programmes I plan them as one system, using ad data to find the terms that convert and SEO to capture the same demand without paying per click. My](https://web.dev/articles/vitals) [medical SEO agency Indonesia<\/a> playbook and the guide on](https://medikabyte.com/medical-seo-agency-indonesia/) [how to attract Indonesian medical tourists<\/a> apply the same logic to organic growth.","Pencarian berbayar membeli visibilitas bulan ini, sedangkan pencarian organik bertumbuh berlipat. Untuk program hospital Google Ads Indonesia, saya merencanakannya sebagai satu sistem, memakai data iklan untuk menemukan kata kunci yang berkonversi dan SEO untuk menangkap permintaan yang sama tanpa membayar per klik. Playbook](https://medikabyte.com/how-to-attract-indonesian-medical-tourists/) [medical SEO agency Indonesia<\/a> saya dan panduan](https://medikabyte.com/medical-seo-agency-indonesia/) [how to attract Indonesian medical tourists<\/a> menerapkan logika yang sama pada pertumbuhan organik."],"n102":["Roles in a combined programme","Peran dalam program gabungan"],"n103":["Channel","Kanal"],"n104":["Strength","Kekuatan"],"n105":["Role in the plan","Peran dalam rencana"],"n106":["Google Ads","Google Ads"],"n107":["Speed and control","Kecepatan dan kendali"],"n108":["Capture ready-to-book demand now","Tangkap permintaan siap daftar sekarang"],"n109":["SEO","SEO"],"n110":["Compounding, low marginal cost","Bertumbuh berlipat, biaya marjinal rendah"],"n111":["Own the research and comparison searches","Kuasai pencarian riset dan perbandingan"],"n112":["Website","Website"],"n113":["Conversion and trust","Konversi dan kepercayaan"],"n114":["Turn both channels into conversations","Ubah kedua kanal menjadi percakapan"],"n115":["Measurement","Pengukuran"],"n116":["One ledger across channels","Satu buku untuk semua kanal"],"n117":["Report cost per treated patient","Laporkan biaya per pasien yang dirawat"],"n118":["Packaged services and care plans are listed in](https://medikabyte.com/how-to-attract-indonesian-medical-tourists/) [ADTYAA Essentials<\/a>, the](https://medikabyte.com/essentials/) [capabilities<\/a> show the engineering behind the work, and the](https://medikabyte.com/#capabilities) [approach<\/a> explains how an engagement runs.","Layanan paket dan paket perawatan tercantum di](https://medikabyte.com/#approach) [ADTYAA Essentials<\/a>,](https://medikabyte.com/essentials/) [keahlian<\/a> kami menunjukkan engineering di balik pekerjaan, dan](https://medikabyte.com/#capabilities) [pendekatan<\/a> kami menjelaskan bagaimana kerja sama dijalankan."],"n119":["Hospital Google Ads Indonesia: common questions","Hospital Google Ads Indonesia: pertanyaan umum"],"n120":["How much should a hospital spend on Google Ads?","Berapa anggaran Google Ads yang sebaiknya dikeluarkan rumah sakit?"],"n121":["It depends on the service line, competition, and the value of a treated patient. I start from the revenue a service line can support, set a test budget, and scale only the campaigns whose cost per treated patient is acceptable.","Tergantung lini layanan, persaingan, dan nilai pasien yang dirawat. Saya mulai dari pendapatan yang dapat ditopang lini layanan, menetapkan anggaran uji, dan hanya meningkatkan kampanye dengan biaya per pasien dirawat yang dapat diterima."],"n122":["Can hospitals advertise every treatment on Google?","Bisakah rumah sakit mengiklankan semua tindakan di Google?"],"n123":["No. Healthcare is a restricted category, and some treatments, claims, and targeting options are limited. I review each campaign against Google's policy and Indonesian health advertising rules before launch.","Tidak. Layanan kesehatan adalah kategori terbatas, dan sebagian tindakan, klaim, dan opsi penargetan dibatasi. Saya meninjau setiap kampanye terhadap kebijakan Google dan aturan periklanan kesehatan Indonesia sebelum diluncurkan."],"n124":["Should we run ads or invest in SEO first?","Mana yang lebih dulu, iklan atau investasi SEO?"],"n125":["Usually both, in sequence. Ads capture ready-to-book demand quickly, and SEO builds the lower-cost base that carries the programme afterwards.","Biasanya keduanya, berurutan. Iklan menangkap permintaan siap daftar dengan cepat, dan SEO membangun fondasi berbiaya lebih rendah yang menopang program berikutnya."],"n126":["Will you guarantee a patient acquisition cost?","Apakah Anda menjamin biaya akuisisi pasien tertentu?"],"n127":["No honest agency can guarantee a market price. I commit to a defined scope, clean tracking, and monthly reporting of cost per conversation, booked consultation, and treated patient.","Tidak ada agensi jujur yang dapat menjamin harga pasar. Saya berkomitmen pada lingkup yang jelas, pelacakan yang bersih, dan pelaporan bulanan biaya per percakapan, konsultasi terjadwal, dan pasien yang dirawat."],"n128":["If you want hospital Google Ads Indonesia campaigns that report cost per treated patient, not cost per click, start with an audit. I review your account, landing pages, and tracking, and reply with initial findings and a proposed scope within 24 hours.","Jika Anda menginginkan kampanye hospital Google Ads Indonesia yang melaporkan biaya per pasien dirawat, bukan biaya per klik, mulailah dengan audit. Saya meninjau akun, landing page, dan pelacakan Anda, lalu membalas dengan temuan awal dan usulan lingkup dalam 24 jam."],"n129":["Ready to lower your patient acquisition cost?","Siap menurunkan biaya akuisisi pasien Anda?"],"n130":["Message me on WhatsApp or send a brief. Your details stay private, and you receive a written reply within 24 hours.","Kirim pesan lewat WhatsApp atau kirim brief. Data Anda tetap privat, dan Anda menerima balasan tertulis dalam 24 jam."]}; var LI = { en: 0, id: 1, zh: 2 }; var L = "en"; var PHONE = "6281411188809", MAIL = "hallo@adtyaa.cloud";](https://medikabyte.com/#approach)

function $(sel, ctx) { return Array.prototype.slice.call((ctx || root).querySelectorAll(sel)); } function byId(id) { return document.getElementById(id); } function t(key, lang) { var e = D[key]; if (!e) { return key; } var v = e[LI[lang || L]]; return (v === undefined || v === "") ? e[0] : v; } function msgLang() { return "en"; } function waUrl(m) { return "https://wa.me/" + PHONE + "?text=" + encodeURIComponent(m); }

/* ---------- language (EN default, ID, 中文) ---------- */ var scLoaded = false; function loadSC() { if (scLoaded) { return; } scLoaded = true; var l = document.createElement("link"); l.rel = "stylesheet"; l.href = "https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap"; document.head.appendChild(l); } function apply() { if (L === "zh") { loadSC(); } document.documentElement.setAttribute("lang", L === "zh" ? "zh-Hans" : L); root.setAttribute("data-l", L); $("[data-i18n]").forEach(function (el) { el.textContent = t(el.getAttribute("data-i18n")); }); $("[data-i18n-html]").forEach(function (el) { el.innerHTML = t(el.getAttribute("data-i18n-html")); }); $("[data-i18n-alt]").forEach(function (el) { el.setAttribute("alt", t(el.getAttribute("data-i18n-alt"))); }); $("[data-i18n-title]").forEach(function (el) { el.setAttribute("title", t(el.getAttribute("data-i18n-title"))); }); $("[data-i18n-aria]").forEach(function (el) { el.setAttribute("aria-label", t(el.getAttribute("data-i18n-aria"))); }); $("[data-wa]").forEach(function (el) { el.setAttribute("href", waUrl(t(el.getAttribute("data-wa"), msgLang()))); }); $("[data-lang]").forEach(function (b) { b.setAttribute("aria-pressed", b.getAttribute("data-lang") === L ? "true" : "false"); }); var st = byId("fs"); if (st) { st.textContent = ""; st.classList.remove("err"); } }

root.addEventListener("click", function (e) { var b = e.target.closest ? e.target.closest("[data-lang]") : null; if (!b) { return; } L = b.getAttribute("data-lang"); apply(); });

(function initLang() { var pick = null; try { var q = new URLSearchParams(window.location.search || "").get("lang"); if (q && LI[q] !== undefined) { pick = q; } } catch (x) {} if (pick) { L = pick; } })();

/* ---------- header + mobile menu ---------- */ var hd = byId("hd"), bg = byId("bg"), mn = byId("mn"); var bar = root.querySelector(".prog span"); var ticking = false; function onScroll() { ticking = false; if (hd) { hd.classList.toggle("sc", window.scrollY > 8); } if (bar) { var h = document.documentElement.scrollHeight - window.innerHeight; var p = h > 0 ? Math.min(1, Math.max(0, window.scrollY / h)) : 0; bar.style.transform = "scaleX(" + p.toFixed(4) + ")"; } } window.addEventListener("scroll", function () { if (!ticking) { ticking = true; window.requestAnimationFrame(onScroll); } }, { passive: true }); onScroll();

function closeMenu() { if (mn) { mn.classList.remove("on"); } if (bg) { bg.setAttribute("aria-expanded", "false"); } } if (bg && mn) { bg.addEventListener("click", function () { var on = mn.classList.toggle("on"); bg.setAttribute("aria-expanded", on ? "true" : "false"); }); mn.addEventListener("click", function (e) { if (e.target.closest && e.target.closest("a")) { closeMenu(); } }); } document.addEventListener("keydown", function (e) { if (e.key === "Escape") { closeMenu(); } }); window.addEventListener("resize", function () { if (window.innerWidth > 1000) { closeMenu(); } });

/* ---------- contact form (no server) ---------- */ var form = byId("cf"); if (form) { var fs = byId("fs"); var val = function (id) { var el = byId(id); return el ? el.value.trim() : ""; }; var optText = function (id) { var el = byId(id); if (!el || !el.value) { return ""; } var key = el.options[el.selectedIndex].getAttribute("data-i18n"); return key ? t(key, msgLang()) : el.options[el.selectedIndex].text; }; var setStatus = function (key, err) { fs.textContent = key ? t(key) : ""; fs.classList.toggle("err", !!err); }; var validate = function () { var ok = true; ["f-name", "f-service"].forEach(function (id) { var el = byId(id), bad = !el.value.trim(); el.setAttribute("aria-invalid", bad ? "true" : "false"); if (bad) { ok = false; } }); return ok; }; var compose = function () { var ml = msgLang(), lines = [t("wa.general", ml), ""]; var add = function (k, v) { if (v) { lines.push(t(k, ml) + ": " + v); } }; add("m.name", val("f-name")); add("m.email", val("f-email")); add("m.wa", val("f-wa")); add("m.url", val("f-url")); add("m.service", optText("f-service")); add("m.eng", optText("f-eng")); add("m.time", optText("f-time")); var m = val("f-msg"); if (m) { lines.push(""); lines.push(t("m.msg", ml) + ":"); lines.push(m); } return lines.join("\n"); }; byId("send-wa").addEventListener("click", function () { if (!validate()) { setStatus("f.err", true); return; } setStatus("f.okwa", false); window.open(waUrl(compose()), "_blank", "noopener"); }); byId("send-mail").addEventListener("click", function () { if (!validate()) { setStatus("f.err", true); return; } setStatus("f.okmail", false); var subject = t("m.subject", msgLang()) + " - " + val("f-name"); window.location.href = "mailto:" + MAIL + "?subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(compose()); }); form.addEventListener("submit", function (e) { e.preventDefault(); byId("send-wa").click(); }); ["f-name", "f-service"].forEach(function (id) { var el = byId(id); var clear = function () { if (el.value.trim()) { el.setAttribute("aria-invalid", "false"); } }; el.addEventListener("input", clear); el.addEventListener("change", clear); }); }

apply();

/* ---------- motion (respects reduced motion) ---------- */ var reduce = window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches;

/* ---------- particle field (article header + final CTA) ---------- */ function initFx(host) { if (!host) { return; } var cv = document.createElement("canvas"); cv.className = "fx"; cv.setAttribute("aria-hidden", "true"); host.insertBefore(cv, host.firstChild); var ctx = cv.getContext("2d"); if (!ctx) { return; } var W = 1, H = 1, stars = [], dust = [], nodes = [], mx = -9999, my = -9999, onScreen = true; var sprite = document.createElement("canvas"); sprite.width = sprite.height = 48; var sg = sprite.getContext("2d"), grad = sg.createRadialGradient(24, 24, 0, 24, 24, 24); grad.addColorStop(0, "rgba(255,243,209,1)"); grad.addColorStop(.25, "rgba(230,200,140,.55)"); grad.addColorStop(1, "rgba(201,164,92,0)"); sg.fillStyle = grad; sg.fillRect(0, 0, 48, 48); function rnd(a, b) { return a + Math.random() * (b - a); } function seed() { var a = W * H, i; stars = []; dust = []; nodes = []; for (i = 0; i < Math.round(a / 9000); i++) { stars.push({ x: rnd(0, W), y: rnd(0, H), r: rnd(.3, 1.05), p: rnd(0, 6.28), s: rnd(.5, 1.6) }); } for (i = 0; i < Math.round(Math.min(46, 16 + a / 42000)); i++) { dust.push({ x: rnd(0, W), y: rnd(0, H), r: rnd(1.4, 3.6), vy: rnd(.1, .38), vx: rnd(-.07, .07), a: rnd(.25, .65), p: rnd(0, 6.28) }); } for (i = 0; i < Math.round(Math.min(64, Math.max(20, a / 24000))); i++) { nodes.push({ x: rnd(0, W), y: rnd(0, H), vx: rnd(-.12, .12), vy: rnd(-.1, .1) }); } } function size() { var r = host.getBoundingClientRect(), dpr = Math.min(window.devicePixelRatio || 1, 2); W = Math.max(1, r.width); H = Math.max(1, r.height); cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr); ctx.setTransform(dpr, 0, 0, dpr, 0, 0); seed(); draw(0, true); } function draw(t, still) { var i, j, n, m, dx, dy, d, al; ctx.clearRect(0, 0, W, H); for (i = 0; i < stars.length; i++) { n = stars[i]; al = .2 + .6 * (.5 + .5 * Math.sin(t * .001 * n.s + n.p)); ctx.fillStyle = "rgba(243,232,205," + (al * .75).toFixed(3) + ")"; ctx.beginPath(); ctx.arc(n.x, n.y, n.r, 0, 6.2832); ctx.fill(); } for (i = 0; i < nodes.length; i++) { n = nodes[i]; if (!still) { n.x += n.vx; n.y += n.vy; if (n.x < -10) { n.x = W + 10; } else if (n.x > W + 10) { n.x = -10; } if (n.y < -10) { n.y = H + 10; } else if (n.y > H + 10) { n.y = -10; } } for (j = i + 1; j < nodes.length; j++) { m = nodes[j]; dx = n.x - m.x; dy = n.y - m.y; if (dx > 150 || dx < -150 || dy > 150 || dy < -150) { continue; } d = Math.sqrt(dx * dx + dy * dy); if (d < 150) { ctx.strokeStyle = "rgba(217,188,130," + ((1 - d / 150) * .2).toFixed(3) + ")"; ctx.lineWidth = .7; ctx.beginPath(); ctx.moveTo(n.x, n.y); ctx.lineTo(m.x, m.y); ctx.stroke(); } } dx = n.x - mx; dy = n.y - my; d = Math.sqrt(dx * dx + dy * dy); if (d < 190) { ctx.strokeStyle = "rgba(246,231,189," + ((1 - d / 190) * .5).toFixed(3) + ")"; ctx.lineWidth = .9; ctx.beginPath(); ctx.moveTo(n.x, n.y); ctx.lineTo(mx, my); ctx.stroke(); } ctx.fillStyle = "rgba(230,205,150,.7)"; ctx.beginPath(); ctx.arc(n.x, n.y, 1.25, 0, 6.2832); ctx.fill(); } for (i = 0; i < dust.length; i++) { n = dust[i]; if (!still) { n.y -= n.vy; n.x += n.vx + Math.sin(t * .0006 + n.p) * .12; if (n.y < -12) { n.y = H + 12; n.x = rnd(0, W); } } ctx.globalAlpha = n.a * (.65 + .35 * Math.sin(t * .0012 + n.p)); ctx.drawImage(sprite, n.x - n.r * 3, n.y - n.r * 3, n.r * 6, n.r * 6); } ctx.globalAlpha = 1; } function loop(ts) { if (onScreen && !document.hidden) { draw(ts, false); } window.requestAnimationFrame(loop); } size(); if ("ResizeObserver" in window) { new ResizeObserver(function () { size(); }).observe(host); } else { window.addEventListener("resize", size); } if (reduce) { return; } if ("IntersectionObserver" in window) { new IntersectionObserver(function (es) { es.forEach(function (en) { onScreen = en.isIntersecting; }); }, { rootMargin: "100px" }).observe(host); } host.addEventListener("pointermove", function (e) { var r = host.getBoundingClientRect(); mx = e.clientX - r.left; my = e.clientY - r.top; }); host.addEventListener("pointerleave", function () { mx = -9999; my = -9999; }); window.requestAnimationFrame(loop); } initFx(root.querySelector(".ah")); initFx(root.querySelector(".final")); if (reduce || !("IntersectionObserver" in window)) { return; } if (!document.body.classList.contains("elementor-editor-active")) { root.classList.add("js"); var rv = new IntersectionObserver(function (es) { es.forEach(function (en) { if (!en.isIntersecting) { return; } en.target.classList.add("in"); rv.unobserve(en.target); }); }, { threshold: 0, rootMargin: "0px 0px -6% 0px" }); $(".rv").forEach(function (el) { rv.observe(el); }); } })();

tetap bisa diseleksi/disalin. */ (function(){ 'use strict'; if(window.__cgOn)return;window.__cgOn=1; if(document.body&&document.body.classList.contains('elementor-editor-active'))return;

var doc=document,root=doc.documentElement; var EDITABLE="input,textarea,select,[contenteditable='true']"; var COPYABLE='.cm,address'; var WM_MS=5000; /* lama watermark tampil setelah screenshot terdeteksi */ var wm=null,wmTimer=0;

root.classList.add('cg-on');

function inEditable(el){return !!(el&&el.closest&&el.closest(EDITABLE))} function block(e){e.preventDefault()}

/* ---------- Watermark screenshot ---------- */ function showWatermark(){ if(!wm){ if(!doc.body)return; wm=doc.createElement('div'); wm.className='cg-wm'; wm.setAttribute('aria-hidden','true'); doc.body.appendChild(wm); } root.classList.add('cg-shot'); clearTimeout(wmTimer); wmTimer=setTimeout(function(){root.classList.remove('cg-shot')},WM_MS); }

/* ---------- Print ---------- */ function printOn(){root.classList.add('cg-print')} function printOff(){root.classList.remove('cg-print')} window.addEventListener('beforeprint',printOn); window.addEventListener('afterprint',printOff); if(window.matchMedia){ var mq=window.matchMedia('print'); var onMq=function(e){e.matches?printOn():printOff()}; if(mq.addEventListener)mq.addEventListener('change',onMq); else if(mq.addListener)mq.addListener(onMq); }

/* ---------- Mouse / seleksi ---------- */ doc.addEventListener('contextmenu',function(e){ if(!inEditable(e.target))block(e); });

doc.addEventListener('dragstart',block);

doc.addEventListener('selectstart',function(e){ var t=e.target&&e.target.nodeType===1?e.target:(e.target&&e.target.parentElement); if(inEditable(t)||(t&&t.closest&&t.closest(COPYABLE)))return; block(e); });

/* ---------- Keyboard ---------- */ doc.addEventListener('keydown',function(e){ var k=e.code,mod=e.ctrlKey||e.metaKey,stop=false;

/* Screenshot: PrintScreen, Cmd+Shift+3/4/5/6 (Mac), Win+Shift+S */ if(k==='PrintScreen'||e.key==='PrintScreen'|| (e.metaKey&&e.shiftKey&&(k==='Digit3'||k==='Digit4'||k==='Digit5'||k==='Digit6'||k==='KeyS'))){ showWatermark(); }

if(k==='F12'){ stop=true; }else if(mod&&!e.altKey&&(k==='KeyP'||(!e.shiftKey&&(k==='KeyS'||k==='KeyU')))){ stop=true; /* Ctrl/Cmd + P (print), S, U */ }else if( (mod&&e.shiftKey&&(k==='KeyI'||k==='KeyJ'||k==='KeyC'))|| /* Ctrl/Cmd + Shift + I, J, C */ (e.metaKey&&e.altKey&&(k==='KeyI'||k==='KeyJ'||k==='KeyC'||k==='KeyU')) /* Cmd + Option + I, J, C, U (Mac) */ ){ stop=true; } if(stop){block(e);e.stopPropagation()} },true);

/* Di Windows, PrintScreen sering hanya mengirim keyup */ doc.addEventListener('keyup',function(e){ if(e.code==='PrintScreen'||e.key==='PrintScreen')showWatermark(); },true);

/* Desktop saja: bila panel dev tools terbuka (docked), bersihkan console saat jendela di-resize */ if(window.matchMedia&&window.matchMedia('(hover:hover) and (pointer:fine)').matches){ var raf=0; window.addEventListener('resize',function(){ if(raf)return; raf=requestAnimationFrame(function(){ raf=0; if((window.outerWidth-window.innerWidth>200||window.outerHeight-window.innerHeight>260)&&window.console&&console.clear){console.clear()} }); },{passive:true}); } }());
