SEO Cacing
Bulk LP Studio · MVP
Bulk landing page workspace

Generate landing page, SEO & AMP.

Buat 5–50 halaman per batch dengan warna bervariasi, metadata SEO, struktur AMP, laporan, dan ZIP export.

Konfigurasi batch

Gunakan domain yang Anda kelola. URL akhir dibuat per halaman.
Wajib isi domain yang menyajikan halaman AMP. Gunakan domain AMP yang benar-benar Anda kelola.
Pilih gambar JPG, PNG, atau WebP. Tiap halaman akan mendapat variasi visual ringan.
Belum ada gambar dipilih.
Admin: email yang dituju adalah beronsoncharles@gmail.com. Autentikasi admin server-side belum dipasang. Jangan anggap halaman ini privat sebelum login dan pembatasan akses server-side diaktifkan.
Siap. Isi form lalu generate ZIP.

MVP: variasi gambar dibuat dari file yang Anda upload; AI image generation, deployment otomatis, backlink API dan validasi AMP belum terhubung.

Solusi untuk kebutuhan Anda

'+t+'

'+desc+'

'+(imagePath?''+esc(d.image||d.brand)+'':'')+''+esc(d.cta)+'

Solusi sesuai kebutuhan

Informasi layanan yang relevan untuk membantu Anda menentukan pilihan.

Proses yang jelas

Pelajari informasi dan tahapan layanan sebelum mengambil keputusan.

Dukungan profesional

Hubungi tim untuk mendiskusikan kebutuhan bisnis Anda.

'; return {slug:slugname,url:url,title:title,html:html,schema:schema}} const TEMPLATE_KEY='seoCacingSavedTemplatesV1';function readTemplates(){try{return JSON.parse(localStorage.getItem(TEMPLATE_KEY)||'{}')}catch(e){return {}}}function refreshTemplates(selected=''){const all=readTemplates(),sel=$('savedTemplates');sel.innerHTML='';Object.keys(all).forEach(k=>{const o=document.createElement('option');o.value=k;o.textContent=all[k].name+' — '+all[k].source;sel.appendChild(o)});sel.value=selected}function setTab(which){const templates=which==='templates';$('templatePanel').style.display=templates?'block':'none';document.querySelector('.layout').style.display=templates?'none':'grid';$('tabGenerator').classList.toggle('primary',!templates);$('tabTemplates').classList.toggle('primary',templates)}$('tabGenerator').onclick=()=>setTab('generator');$('tabTemplates').onclick=()=>setTab('templates');$('saveTemplate').onclick=()=>{const name=$('templateName').value.trim(),source=$('templateSource').value.trim();if(!name||!source){$('templateStatus').textContent='Nama template dan domain website contoh wajib diisi.';return}try{new URL(source)}catch(e){$('templateStatus').textContent='Domain contoh harus berupa URL lengkap, misalnya https://website-contoh.com';return}const all=readTemplates(),norm=s=>String(s||'').trim().replace(/\\/$/,'').toLowerCase(),duplicate=Object.entries(all).find(([k,t])=>norm(t.name)===norm(name)||norm(t.source)===norm(source));if(duplicate){$('templateStatus').textContent='⚠️ Template ini sudah ada: “'+duplicate[1].name+'”. Penyimpanan dibatalkan agar template lama tidak tertimpa. Pilih template yang sudah ada atau ubah nama/domain referensi.';refreshTemplates(duplicate[0]);return}const landingCode=$('templateLandingCode').value.trim(),ampCode=$('templateAmpCode').value.trim();if(!landingCode||!ampCode){$('templateStatus').textContent='Isi contoh coding landing page dan contoh code AMP sebelum menyimpan template.';return}const key=Date.now().toString(36)+'-'+slug(name),cfg=data();delete cfg.images;all[key]={name,source,landingCode,ampCode,settings:cfg};try{localStorage.setItem(TEMPLATE_KEY,JSON.stringify(all));refreshTemplates(key);$('templateStatus').textContent='Template berhasil disimpan. Template dengan nama atau domain referensi yang sama akan ditolak agar tidak terjadi duplikasi.'}catch(e){$('templateStatus').textContent='Penyimpanan gagal. Periksa ruang penyimpanan browser.'}};$('loadTemplate').onclick=()=>{const t=readTemplates()[$('savedTemplates').value];if(!t){$('templateStatus').textContent='Pilih template terlebih dahulu.';return}const cfg=t.settings||{};$('templateLandingCode').value=t.landingCode||'';$('templateAmpCode').value=t.ampCode||'';['brand','count','title','desc','domain','ampdomain','amp','variation','deploy','cta','image'].forEach(k=>{if(cfg[k]!==undefined&&$(k))$(k).value=cfg[k]});preview();$('templateStatus').textContent='Pengaturan dimuat ke generator. Pilih ulang gambar upload jika dibutuhkan.';setTab('generator')};$('deleteTemplate').onclick=()=>{const k=$('savedTemplates').value;if(!k){$('templateStatus').textContent='Pilih template yang ingin dihapus.';return}const all=readTemplates();delete all[k];localStorage.setItem(TEMPLATE_KEY,JSON.stringify(all));refreshTemplates();$('templateStatus').textContent='Template dihapus dari browser ini.'};refreshTemplates();$('refresh').onclick=preview;$('form').addEventListener('input',preview);$('images').addEventListener('change',()=>{const fs=Array.from($('images').files||[]);$('imagePreview').textContent=fs.length?fs.length+' gambar dipilih: '+fs.map(f=>f.name).join(', '):'Belum ada gambar dipilih.'});async function makeImageVariant(file,index){const bitmap=await createImageBitmap(file);const canvas=document.createElement('canvas');const scale=Math.min(1,1400/Math.max(bitmap.width,bitmap.height));canvas.width=Math.max(1,Math.round(bitmap.width*scale));canvas.height=Math.max(1,Math.round(bitmap.height*scale));const ctx=canvas.getContext('2d');if(index%2){ctx.translate(canvas.width,0);ctx.scale(-1,1)}ctx.filter=['none','saturate(1.08) contrast(1.03)','brightness(1.03) saturate(.94)','contrast(1.04)'][index%4];ctx.drawImage(bitmap,0,0,canvas.width,canvas.height);bitmap.close();const blob=await new Promise(resolve=>canvas.toBlob(resolve,'image/jpeg',0.9));if(!blob)throw new Error('Gagal memproses gambar');return blob;} $('form').onsubmit=async e=>{e.preventDefault();let d=data();if(!d.brand||!d.title||!d.desc||!d.domain||!d.ampdomain){$('status').textContent='Lengkapi semua field wajib, termasuk Domain AMPHTML.';return}if(!window.JSZip){$('status').textContent='ZIP library tidak termuat. Periksa internet lalu coba lagi.';return} $('go').disabled=true;$('status').textContent='Membuat batch '+d.count+' landing page...';try{let zip=new JSZip(),mapping=['page,slug,title,canonical,image'],audits=['page,url,amp_validation,seo_status'];for(let i=0;iURL.revokeObjectURL(a.href),2500);$('status').textContent='ZIP berhasil dibuat: '+d.count+' halaman. AMP validator, gambar AI, deployment dan audit backlink belum aktif; periksa file sebelum dipublikasikan.'}catch(err){$('status').textContent='Gagal membuat ZIP: '+err.message}finally{$('go').disabled=false} };preview();