Custom Domain untuk Web Google Apps Script: 3 Cara yang Bisa Dipakai

Web app Apps Script berjalan di alamat panjang seperti script.google.com/macros/s/AKfy.../exec, dan alamat itu tidak bisa diganti langsung dengan domain sendiri. Solusinya adalah menaruh sesuatu di depan GAS: Cloudflare Worker sebagai perantara, atau frontend sendiri yang memakai GAS hanya sebagai API.
Pilih cara yang sesuai
| Cara | Cocok untuk | Kelebihan | Keterbatasan |
|---|---|---|---|
| 1. Cloudflare Worker sebagai proxy | Endpoint API atau webhook (JSON) | Setup cepat, alamat bersih di domain sendiri | Halaman HTML dari HtmlService sering rusak lewat proxy |
| 2. Frontend sendiri + GAS sebagai API | Aplikasi dengan tampilan penuh | Tampilan bebas, cepat, bisa SEO, domain sendiri | Perlu memisahkan tampilan dari kode GAS |
| 3. Embed di Google Sites | Halaman sederhana yang sudah ada | Tanpa kode tambahan | Tampil dalam iframe, kontrol tampilan terbatas |
Cara 1: Worker sebagai proxy
Worker menerima permintaan di domain Anda, meneruskannya ke alamat /exec, lalu mengembalikan hasilnya. Ini paling cocok untuk API.
- Deploy web app GAS dengan akses Anyone (siapa saja), lalu salin URL yang berakhiran
/exec. - Buat Worker baru di Cloudflare dan tempel kode berikut:
const GAS = 'https://script.google.com/macros/s/ISI_ID_DEPLOY_ANDA/exec';
export default {
async fetch(request) {
const url = new URL(request.url);
const init = { method: request.method, redirect: 'follow' };
if (request.method === 'POST') {
init.body = await request.text();
init.headers = { 'Content-Type': 'text/plain;charset=utf-8' };
}
const res = await fetch(GAS + url.search, init);
const out = new Response(res.body, res);
out.headers.set('Access-Control-Allow-Origin', '*');
return out;
}
};- Buka Workers & Pages, pilih Worker Anda, masuk ke Settings > Domains & Routes, klik Add > Custom Domain, isi mis.
api.domainanda.com, lalu Add Custom Domain. Domainnya harus sudah ada di Cloudflare. DNS dan sertifikat HTTPS dibuat otomatis. - Uji dengan membuka
https://api.domainanda.com/?aksi=tes.
GAS membalas dengan pengalihan (redirect) ke alamat lain milik Google, jadi redirect: 'follow' wajib ada. Kirim data POST dengan Content-Type: text/plain supaya browser tidak memicu permintaan preflight yang tidak dilayani GAS.
Cara 2: Frontend sendiri, GAS sebagai API
Ini cara yang paling rapi untuk aplikasi nyata. Kode tampilan (HTML, CSS, JavaScript) pindah ke Cloudflare Pages atau Worker di domain Anda. GAS hanya menerima dan mengirim JSON.
// Code.gs: GAS sebagai API
function doPost(e) {
const data = JSON.parse(e.postData.contents);
const hasil = prosesData(data); // logika lama Anda
return ContentService
.createTextOutput(JSON.stringify(hasil))
.setMimeType(ContentService.MimeType.JSON);
}// Di frontend
const res = await fetch(GAS_URL, {
method: 'POST',
headers: { 'Content-Type': 'text/plain;charset=utf-8' },
body: JSON.stringify({ aksi: 'simpan', nama: 'Budi' })
});
const hasil = await res.json();Semua pemanggilan google.script.run di tampilan lama diganti dengan fetch. Domain sendiri dipasang pada Pages atau Worker yang melayani frontend itu.
Cara 3: Embed di Google Sites
Buat situs di Google Sites, sisipkan web app GAS lewat menu Embed, lalu hubungkan domain sendiri dari pengaturan situs. Pengunjung melihat domain Anda, tetapi aplikasinya tetap tampil di dalam bingkai.
Catatan penting
- Akses Anyone berarti siapa pun yang tahu URL-nya bisa memanggil. Jangan taruh kunci rahasia di frontend, dan validasi setiap permintaan di GAS.
- GAS punya kuota harian dan waktu respons yang kadang lambat. Untuk aplikasi yang ramai, pindahkan data ke database seperti Supabase (lihat artikel migrasi Apps Script ke Supabase).
- Parameter bernama
cdansiddipakai Google secara internal dan bisa menyebabkan galat 405. Hindari sebagai nama parameter.
Sumber: Web apps, Google Apps Script dan Custom Domains, Cloudflare Workers.