GEOSEEK 3.0
This commit is contained in:
parent
9fb349ab84
commit
05b4206387
File diff suppressed because it is too large
Load Diff
@ -153,6 +153,7 @@ type TrendingMeta = {
|
||||
type SearchMeta = {
|
||||
count: number;
|
||||
radius_km?: number | null;
|
||||
effective_radius_km?: number | null;
|
||||
radius_zone?: RadiusZone | null;
|
||||
radius_zones: RadiusZone[];
|
||||
distance_buckets: DistanceBucket[];
|
||||
@ -520,103 +521,214 @@ const categoryKeywordGroups: KeywordGroup[] = [
|
||||
{
|
||||
title: 'Kuliner',
|
||||
description:
|
||||
'Intent restoran, cafe, warung makan, kuliner, dan makan enak.',
|
||||
'Intent makanan, restoran, cafe, warung makan, warteg, bakso, soto, seafood, dan catering.',
|
||||
keywords: [
|
||||
{
|
||||
label: 'Restoran terdekat',
|
||||
query: 'restoran terdekat',
|
||||
category: 'cafe-melayu',
|
||||
},
|
||||
{
|
||||
label: 'Cafe terdekat',
|
||||
query: 'cafe terdekat',
|
||||
category: 'cafe-melayu',
|
||||
},
|
||||
{
|
||||
label: 'Warung makan terdekat',
|
||||
query: 'warung makan terdekat',
|
||||
category: 'cafe-melayu',
|
||||
},
|
||||
{
|
||||
label: 'Kuliner terdekat',
|
||||
query: 'kuliner terdekat',
|
||||
category: 'cafe-melayu',
|
||||
},
|
||||
{
|
||||
label: 'Makan enak dekat saya',
|
||||
query: 'makan enak dekat saya',
|
||||
category: 'cafe-melayu',
|
||||
},
|
||||
{ label: 'Makanan terdekat', query: 'makanan terdekat' },
|
||||
{ label: 'Restoran terdekat', query: 'restoran terdekat' },
|
||||
{ label: 'Cafe terdekat', query: 'cafe terdekat' },
|
||||
{ label: 'Warung makan terdekat', query: 'warung makan terdekat' },
|
||||
{ label: 'Warteg terdekat', query: 'warteg terdekat' },
|
||||
{ label: 'Bakso terdekat', query: 'bakso terdekat' },
|
||||
{ label: 'Soto terdekat', query: 'soto terdekat' },
|
||||
{ label: 'Ayam goreng terdekat', query: 'ayam goreng terdekat' },
|
||||
{ label: 'Seafood terdekat', query: 'seafood terdekat' },
|
||||
{ label: 'Catering terdekat', query: 'catering terdekat' },
|
||||
{ label: 'Minuman terdekat', query: 'minuman terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Kesehatan',
|
||||
title: 'Produk & Toko',
|
||||
description:
|
||||
'Intent apotek, klinik, rumah sakit, dokter, dan layanan 24 jam.',
|
||||
'Intent penjual, toko, ready stock, elektronik, fashion, herbal, furniture, bayi, buku, perhiasan, dan kebutuhan kantor.',
|
||||
keywords: [
|
||||
{ label: 'Smartphone terdekat', query: 'penjual smartphone terdekat' },
|
||||
{ label: 'Laptop terdekat', query: 'penjual laptop terdekat' },
|
||||
{ label: 'Elektronik terdekat', query: 'toko elektronik terdekat' },
|
||||
{ label: 'Fashion terdekat', query: 'toko fashion terdekat' },
|
||||
{ label: 'Sepatu terdekat', query: 'toko sepatu terdekat' },
|
||||
{ label: 'Tas terdekat', query: 'toko tas terdekat' },
|
||||
{ label: 'Kosmetik terdekat', query: 'toko kosmetik terdekat' },
|
||||
{ label: 'Skincare terdekat', query: 'toko skincare terdekat' },
|
||||
{ label: 'Herbal terdekat', query: 'toko herbal terdekat' },
|
||||
{ label: 'Obat terdekat', query: 'toko obat terdekat' },
|
||||
{ label: 'Furniture terdekat', query: 'toko furniture terdekat' },
|
||||
{
|
||||
label: 'Apotek terdekat',
|
||||
query: 'apotek terdekat',
|
||||
category: 'toko-herbal-kesehatan',
|
||||
},
|
||||
{
|
||||
label: 'Klinik terdekat',
|
||||
query: 'klinik terdekat',
|
||||
category: 'toko-herbal-kesehatan',
|
||||
},
|
||||
{
|
||||
label: 'Rumah sakit terdekat',
|
||||
query: 'rumah sakit terdekat',
|
||||
category: 'toko-herbal-kesehatan',
|
||||
},
|
||||
{
|
||||
label: 'Dokter terdekat',
|
||||
query: 'dokter terdekat',
|
||||
category: 'toko-herbal-kesehatan',
|
||||
},
|
||||
{
|
||||
label: 'Apotek 24 jam terdekat',
|
||||
query: 'apotek 24 jam terdekat',
|
||||
category: 'toko-herbal-kesehatan',
|
||||
label: 'Peralatan rumah tangga',
|
||||
query: 'peralatan rumah tangga terdekat',
|
||||
},
|
||||
{ label: 'Peralatan dapur', query: 'peralatan dapur terdekat' },
|
||||
{ label: 'Perlengkapan bayi', query: 'perlengkapan bayi terdekat' },
|
||||
{ label: 'Mainan anak', query: 'mainan anak terdekat' },
|
||||
{ label: 'Buku terdekat', query: 'toko buku terdekat' },
|
||||
{ label: 'Kebutuhan kantor', query: 'kebutuhan kantor terdekat' },
|
||||
{ label: 'Perhiasan terdekat', query: 'toko perhiasan terdekat' },
|
||||
{ label: 'Jam tangan terdekat', query: 'toko jam tangan terdekat' },
|
||||
{ label: 'Aksesoris terdekat', query: 'toko aksesoris terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Otomotif',
|
||||
title: 'Bangunan & Otomotif',
|
||||
description:
|
||||
'Intent bengkel, tambal ban, cuci mobil, SPBU, dan servis kendaraan.',
|
||||
'Intent toko bahan bangunan, renovasi, servis AC, bengkel, sparepart, dealer, tambal ban, dan cuci mobil.',
|
||||
keywords: [
|
||||
{
|
||||
label: 'Bengkel terdekat',
|
||||
query: 'bengkel terdekat',
|
||||
category: 'bengkel-mobil',
|
||||
},
|
||||
{
|
||||
label: 'Tambal ban terdekat',
|
||||
query: 'tambal ban terdekat',
|
||||
category: 'bengkel-mobil',
|
||||
},
|
||||
{
|
||||
label: 'Cuci mobil terdekat',
|
||||
query: 'cuci mobil terdekat',
|
||||
category: 'bengkel-mobil',
|
||||
},
|
||||
{
|
||||
label: 'SPBU terdekat',
|
||||
query: 'SPBU terdekat',
|
||||
category: 'bengkel-mobil',
|
||||
},
|
||||
{ label: 'Toko bahan bangunan', query: 'toko bahan bangunan terdekat' },
|
||||
{ label: 'Servis AC terdekat', query: 'servis ac terdekat' },
|
||||
{ label: 'Tukang bangunan', query: 'tukang bangunan terdekat' },
|
||||
{ label: 'Renovasi rumah', query: 'renovasi rumah terdekat' },
|
||||
{ label: 'Jasa kebersihan', query: 'jasa kebersihan terdekat' },
|
||||
{ label: 'Bengkel motor', query: 'bengkel motor terdekat' },
|
||||
{ label: 'Bengkel mobil', query: 'bengkel mobil terdekat' },
|
||||
{ label: 'Sparepart motor', query: 'sparepart motor terdekat' },
|
||||
{ label: 'Sparepart mobil', query: 'sparepart mobil terdekat' },
|
||||
{ label: 'Dealer motor', query: 'dealer motor terdekat' },
|
||||
{ label: 'Tambal ban', query: 'tambal ban terdekat' },
|
||||
{ label: 'Cuci mobil', query: 'cuci mobil terdekat' },
|
||||
{ label: 'SPBU terdekat', query: 'SPBU terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Belanja',
|
||||
title: 'Kesehatan & Hewan',
|
||||
description:
|
||||
'Intent toko, minimarket, pasar, mall, produk, dan stok ready.',
|
||||
'Intent rumah sakit, klinik, apotek, dokter, laboratorium, alat kesehatan, pet shop, klinik hewan, dan grooming.',
|
||||
keywords: [
|
||||
{ label: 'Toko terdekat', query: 'toko terdekat' },
|
||||
{ label: 'Minimarket terdekat', query: 'minimarket terdekat' },
|
||||
{ label: 'Pasar terdekat', query: 'pasar terdekat' },
|
||||
{ label: 'Mall terdekat', query: 'mall terdekat' },
|
||||
{ label: 'Rumah sakit terdekat', query: 'rumah sakit terdekat' },
|
||||
{ label: 'Klinik terdekat', query: 'klinik terdekat' },
|
||||
{ label: 'Apotek terdekat', query: 'apotek terdekat' },
|
||||
{ label: 'Dokter terdekat', query: 'dokter terdekat' },
|
||||
{ label: 'Dokter gigi', query: 'dokter gigi terdekat' },
|
||||
{ label: 'Laboratorium', query: 'laboratorium terdekat' },
|
||||
{ label: 'Alat kesehatan', query: 'alat kesehatan terdekat' },
|
||||
{ label: 'Pet shop', query: 'pet shop terdekat' },
|
||||
{ label: 'Klinik hewan', query: 'klinik hewan terdekat' },
|
||||
{ label: 'Grooming hewan', query: 'grooming hewan terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Properti',
|
||||
description:
|
||||
'Intent properti, rumah dijual, tanah dijual, ruko, apartemen, kost, dan kontrakan.',
|
||||
keywords: [
|
||||
{ label: 'Properti terdekat', query: 'properti terdekat' },
|
||||
{ label: 'Rumah dijual', query: 'rumah dijual terdekat' },
|
||||
{ label: 'Tanah dijual', query: 'tanah dijual terdekat' },
|
||||
{ label: 'Ruko terdekat', query: 'ruko terdekat' },
|
||||
{ label: 'Apartemen terdekat', query: 'apartemen terdekat' },
|
||||
{ label: 'Kost terdekat', query: 'kost terdekat' },
|
||||
{ label: 'Kontrakan terdekat', query: 'kontrakan terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Jasa Profesional & Digital',
|
||||
description:
|
||||
'Intent notaris, pengacara, guru privat, digital marketing, website, aplikasi, desain, foto/video, pajak, dan konsultan.',
|
||||
keywords: [
|
||||
{ label: 'Notaris terdekat', query: 'notaris terdekat' },
|
||||
{ label: 'Pengacara terdekat', query: 'pengacara terdekat' },
|
||||
{ label: 'Guru privat', query: 'guru privat terdekat' },
|
||||
{ label: 'Les privat', query: 'les privat terdekat' },
|
||||
{ label: 'Digital marketing', query: 'digital marketing terdekat' },
|
||||
{ label: 'SEO terdekat', query: 'jasa seo terdekat' },
|
||||
{ label: 'Pembuatan website', query: 'pembuatan website terdekat' },
|
||||
{ label: 'Pembuatan aplikasi', query: 'pembuatan aplikasi terdekat' },
|
||||
{ label: 'Desain grafis', query: 'desain grafis terdekat' },
|
||||
{ label: 'Fotografer', query: 'fotografer terdekat' },
|
||||
{ label: 'Videografer', query: 'videografer terdekat' },
|
||||
{ label: 'Wedding organizer', query: 'wedding organizer terdekat' },
|
||||
{ label: 'Event organizer', query: 'event organizer terdekat' },
|
||||
{ label: 'Jasa pajak', query: 'jasa pajak terdekat' },
|
||||
{ label: 'Konsultan bisnis', query: 'konsultan bisnis terdekat' },
|
||||
{ label: 'Konsultan hukum', query: 'konsultan hukum terdekat' },
|
||||
{ label: 'Konsultan keuangan', query: 'konsultan keuangan terdekat' },
|
||||
{ label: 'Percetakan', query: 'percetakan terdekat' },
|
||||
{ label: 'Konveksi', query: 'konveksi terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Pertanian & Peternakan',
|
||||
description:
|
||||
'Intent pupuk, bibit tanaman, pestisida, alat pertanian, peternakan, dan pakan ternak.',
|
||||
keywords: [
|
||||
{ label: 'Pupuk terdekat', query: 'pupuk terdekat' },
|
||||
{ label: 'Bibit tanaman', query: 'bibit tanaman terdekat' },
|
||||
{ label: 'Pestisida terdekat', query: 'pestisida terdekat' },
|
||||
{ label: 'Alat pertanian', query: 'alat pertanian terdekat' },
|
||||
{ label: 'Peternakan', query: 'peternakan terdekat' },
|
||||
{ label: 'Pakan ternak', query: 'pakan ternak terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Keuangan',
|
||||
description: 'Intent bank, ATM, koperasi, pegadaian, pembayaran, dan QRIS.',
|
||||
keywords: [
|
||||
{ label: 'Bank terdekat', query: 'bank terdekat' },
|
||||
{ label: 'ATM terdekat', query: 'ATM terdekat' },
|
||||
{ label: 'Koperasi terdekat', query: 'koperasi terdekat' },
|
||||
{ label: 'Pegadaian terdekat', query: 'pegadaian terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Travel & Logistik',
|
||||
description:
|
||||
'Intent rental mobil/motor, travel, agen travel, kurir, logistik, ekspedisi, dan pengiriman barang.',
|
||||
keywords: [
|
||||
{ label: 'Rental mobil', query: 'rental mobil terdekat' },
|
||||
{ label: 'Rental motor', query: 'rental motor terdekat' },
|
||||
{ label: 'Travel terdekat', query: 'travel terdekat' },
|
||||
{ label: 'Agen travel', query: 'agen travel terdekat' },
|
||||
{ label: 'Kurir terdekat', query: 'kurir terdekat' },
|
||||
{ label: 'Logistik terdekat', query: 'logistik terdekat' },
|
||||
{ label: 'Ekspedisi terdekat', query: 'ekspedisi terdekat' },
|
||||
{ label: 'Pengiriman barang', query: 'pengiriman barang terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Kecantikan',
|
||||
description: 'Intent salon, barbershop, skincare, kosmetik, dan beauty care.',
|
||||
keywords: [
|
||||
{ label: 'Salon terdekat', query: 'salon terdekat' },
|
||||
{ label: 'Barbershop terdekat', query: 'barbershop terdekat' },
|
||||
{ label: 'Skincare terdekat', query: 'skincare terdekat' },
|
||||
{ label: 'Kosmetik terdekat', query: 'kosmetik terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Komputer & Internet',
|
||||
description:
|
||||
'Intent service laptop, service printer, komputer, CCTV, internet, wifi, dan toko IT.',
|
||||
keywords: [
|
||||
{ label: 'Service laptop', query: 'service laptop terdekat' },
|
||||
{ label: 'Service printer', query: 'service printer terdekat' },
|
||||
{ label: 'Komputer terdekat', query: 'komputer terdekat' },
|
||||
{ label: 'CCTV terdekat', query: 'cctv terdekat' },
|
||||
{ label: 'Internet terdekat', query: 'internet terdekat' },
|
||||
{ label: 'Wifi terdekat', query: 'wifi terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Kerja, Event & UMKM',
|
||||
description:
|
||||
'Intent lowongan kerja, freelance, magang, seminar, festival, bazar, UMKM, toko kelontong, dan home industry.',
|
||||
keywords: [
|
||||
{ label: 'Lowongan kerja', query: 'lowongan kerja terdekat' },
|
||||
{ label: 'Freelance', query: 'freelance terdekat' },
|
||||
{ label: 'Magang', query: 'magang terdekat' },
|
||||
{ label: 'Seminar', query: 'seminar terdekat' },
|
||||
{ label: 'Festival', query: 'festival terdekat' },
|
||||
{ label: 'Bazar', query: 'bazar terdekat' },
|
||||
{ label: 'UMKM terdekat', query: 'umkm terdekat' },
|
||||
{ label: 'Toko kelontong', query: 'toko kelontong terdekat' },
|
||||
{ label: 'Home industry', query: 'home industry terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Wisata & Penginapan',
|
||||
description: 'Intent tempat wisata, hotel, penginapan, villa, dan pantai.',
|
||||
keywords: [
|
||||
{ label: 'Tempat wisata', query: 'tempat wisata terdekat' },
|
||||
{ label: 'Hotel terdekat', query: 'hotel terdekat' },
|
||||
{ label: 'Penginapan terdekat', query: 'penginapan terdekat' },
|
||||
{ label: 'Villa terdekat', query: 'villa terdekat' },
|
||||
{ label: 'Pantai terdekat', query: 'pantai terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -634,114 +746,84 @@ const categoryKeywordGroups: KeywordGroup[] = [
|
||||
{ label: 'Kantor BPJS terdekat', query: 'kantor bpjs terdekat' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Wisata',
|
||||
description: 'Intent tempat wisata, pantai, hotel, dan penginapan.',
|
||||
keywords: [
|
||||
{ label: 'Tempat wisata terdekat', query: 'tempat wisata terdekat' },
|
||||
{ label: 'Pantai terdekat', query: 'pantai terdekat' },
|
||||
{ label: 'Hotel terdekat', query: 'hotel terdekat' },
|
||||
{ label: 'Penginapan terdekat', query: 'penginapan terdekat' },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const requiredLocationKeywords: KeywordChip[] = [
|
||||
{ label: 'Terdekat', query: 'terdekat' },
|
||||
{ label: 'Dekat Saya', query: 'dekat saya' },
|
||||
{ label: 'Near Me', query: 'near me' },
|
||||
{ label: 'Sekitar Saya', query: 'sekitar saya' },
|
||||
{ label: 'Lokasi Terdekat', query: 'lokasi terdekat' },
|
||||
{ label: 'Alamat Penjual', query: 'alamat penjual terdekat' },
|
||||
{ label: 'Lokasi Penjual', query: 'lokasi penjual terdekat' },
|
||||
{ label: 'Buka Sekarang', query: 'buka sekarang' },
|
||||
{ label: '24 Jam', query: '24 jam' },
|
||||
{ label: 'Radius 1 Km', query: 'radius 1 km', radiusKm: 1 },
|
||||
{ label: 'Radius 5 Km', query: 'radius 5 km', radiusKm: 5 },
|
||||
{ label: 'Radius 10 Km', query: 'radius 10 km', radiusKm: 10 },
|
||||
{ label: 'Dalam Kota Saya', query: 'dalam kota saya' },
|
||||
{ label: 'Dalam Kecamatan Saya', query: 'dalam kecamatan saya' },
|
||||
{ label: 'Dalam Kelurahan', query: 'dalam kelurahan' },
|
||||
{ label: 'Dalam Desa', query: 'dalam desa' },
|
||||
{ label: 'Populer', query: 'populer' },
|
||||
{ label: 'Murah', query: 'murah terdekat' },
|
||||
{ label: 'Terbaik', query: 'terbaik terdekat' },
|
||||
{ label: 'Terlaris', query: 'terlaris terdekat' },
|
||||
{ label: 'Terpopuler', query: 'terpopuler terdekat' },
|
||||
{ label: 'Rating Tertinggi', query: 'rating tertinggi' },
|
||||
{ label: 'Paling Ramai', query: 'paling ramai' },
|
||||
{ label: 'Paling Murah', query: 'paling murah' },
|
||||
{ label: 'Terlaris', query: 'terlaris' },
|
||||
{ label: 'Terbaru', query: 'terbaru' },
|
||||
{ label: 'Direkomendasikan', query: 'direkomendasikan' },
|
||||
{ label: 'Terverifikasi', query: 'terverifikasi' },
|
||||
{ label: 'Promo', query: 'promo terdekat' },
|
||||
{ label: 'Diskon', query: 'diskon terdekat' },
|
||||
{ label: 'Ready Stock', query: 'ready stock terdekat' },
|
||||
{ label: 'Tersedia', query: 'tersedia terdekat' },
|
||||
{ label: 'Terverifikasi', query: 'terverifikasi terdekat' },
|
||||
{ label: 'Radius 1 Km', query: 'dalam radius 1 km', radiusKm: 1 },
|
||||
{ label: 'Radius 5 Km', query: 'dalam radius 5 km', radiusKm: 5 },
|
||||
{ label: 'Radius 10 Km', query: 'dalam radius 10 km', radiusKm: 10 },
|
||||
{ label: 'RT/RW', query: 'sekitar rt rw' },
|
||||
{ label: 'Dusun', query: 'sekitar dusun' },
|
||||
{ label: 'Desa', query: 'sekitar desa' },
|
||||
{ label: 'Kelurahan', query: 'sekitar kelurahan' },
|
||||
{ label: 'Kecamatan', query: 'sekitar kecamatan' },
|
||||
{ label: 'Kabupaten', query: 'sekitar kabupaten' },
|
||||
{ label: 'Kota', query: 'sekitar kota' },
|
||||
{ label: 'Provinsi', query: 'sekitar provinsi' },
|
||||
{ label: 'Beli', query: 'beli terdekat' },
|
||||
{ label: 'Pesan', query: 'pesan terdekat' },
|
||||
{ label: 'Booking', query: 'booking terdekat' },
|
||||
{ label: 'Reservasi', query: 'reservasi terdekat' },
|
||||
{ label: 'Order', query: 'order terdekat' },
|
||||
{ label: 'Antar', query: 'antar terdekat' },
|
||||
{ label: 'Kirim', query: 'kirim terdekat' },
|
||||
{ label: 'COD', query: 'cod terdekat' },
|
||||
{ label: 'QRIS', query: 'qris terdekat' },
|
||||
{ label: 'E-Wallet', query: 'e-wallet terdekat' },
|
||||
{ label: 'Cashback', query: 'cashback terdekat' },
|
||||
{ label: 'Gratis Ongkir', query: 'gratis ongkir terdekat' },
|
||||
{ label: 'Same Day', query: 'same day terdekat' },
|
||||
{ label: 'Instant', query: 'instant terdekat' },
|
||||
];
|
||||
|
||||
const topTrafficKeywords: KeywordChip[] = [
|
||||
{ label: 'Terdekat', query: 'terdekat' },
|
||||
{ label: 'Dekat Saya', query: 'dekat saya' },
|
||||
{ label: 'Near Me', query: 'near me' },
|
||||
{ label: 'Buka Sekarang', query: 'buka sekarang' },
|
||||
{ label: '24 Jam', query: '24 jam' },
|
||||
{
|
||||
label: 'Restoran Terdekat',
|
||||
query: 'restoran terdekat',
|
||||
category: 'cafe-melayu',
|
||||
},
|
||||
{ label: 'Cafe Terdekat', query: 'cafe terdekat', category: 'cafe-melayu' },
|
||||
{
|
||||
label: 'Warung Makan Terdekat',
|
||||
query: 'warung makan terdekat',
|
||||
category: 'cafe-melayu',
|
||||
},
|
||||
{
|
||||
label: 'Kuliner Terdekat',
|
||||
query: 'kuliner terdekat',
|
||||
category: 'cafe-melayu',
|
||||
},
|
||||
{
|
||||
label: 'Makan Enak Dekat Saya',
|
||||
query: 'makan enak dekat saya',
|
||||
category: 'cafe-melayu',
|
||||
},
|
||||
{
|
||||
label: 'Apotek Terdekat',
|
||||
query: 'apotek terdekat',
|
||||
category: 'toko-herbal-kesehatan',
|
||||
},
|
||||
{
|
||||
label: 'Klinik Terdekat',
|
||||
query: 'klinik terdekat',
|
||||
category: 'toko-herbal-kesehatan',
|
||||
},
|
||||
{
|
||||
label: 'Rumah Sakit Terdekat',
|
||||
query: 'rumah sakit terdekat',
|
||||
category: 'toko-herbal-kesehatan',
|
||||
},
|
||||
{
|
||||
label: 'Dokter Terdekat',
|
||||
query: 'dokter terdekat',
|
||||
category: 'toko-herbal-kesehatan',
|
||||
},
|
||||
{
|
||||
label: 'Apotek 24 Jam Terdekat',
|
||||
query: 'apotek 24 jam terdekat',
|
||||
category: 'toko-herbal-kesehatan',
|
||||
},
|
||||
{
|
||||
label: 'Bengkel Terdekat',
|
||||
query: 'bengkel terdekat',
|
||||
category: 'bengkel-mobil',
|
||||
},
|
||||
{
|
||||
label: 'Tambal Ban Terdekat',
|
||||
query: 'tambal ban terdekat',
|
||||
category: 'bengkel-mobil',
|
||||
},
|
||||
{
|
||||
label: 'Cuci Mobil Terdekat',
|
||||
query: 'cuci mobil terdekat',
|
||||
category: 'bengkel-mobil',
|
||||
},
|
||||
{ label: 'SPBU Terdekat', query: 'SPBU terdekat', category: 'bengkel-mobil' },
|
||||
{ label: 'Makanan Terdekat', query: 'makanan terdekat' },
|
||||
{ label: 'Warteg Terdekat', query: 'warteg terdekat' },
|
||||
{ label: 'Restoran Terdekat', query: 'restoran terdekat' },
|
||||
{ label: 'Cafe Terdekat', query: 'cafe terdekat' },
|
||||
{ label: 'Apotek Terdekat', query: 'apotek terdekat' },
|
||||
{ label: 'Rumah Sakit Terdekat', query: 'rumah sakit terdekat' },
|
||||
{ label: 'Bengkel Terdekat', query: 'bengkel terdekat' },
|
||||
{ label: 'Hotel Terdekat', query: 'hotel terdekat' },
|
||||
{ label: 'ATM Terdekat', query: 'ATM terdekat' },
|
||||
{ label: 'SPBU Terdekat', query: 'SPBU terdekat' },
|
||||
{ label: 'Toko Terdekat', query: 'toko terdekat' },
|
||||
{ label: 'Toko Bahan Bangunan', query: 'toko bahan bangunan terdekat' },
|
||||
{ label: 'Laundry Terdekat', query: 'laundry terdekat' },
|
||||
{ label: 'Servis AC Terdekat', query: 'servis ac terdekat' },
|
||||
{ label: 'Service Laptop', query: 'service laptop terdekat' },
|
||||
{ label: 'Dokter Terdekat', query: 'dokter terdekat' },
|
||||
{ label: 'Kost Terdekat', query: 'kost terdekat' },
|
||||
{ label: 'Rumah Dijual', query: 'rumah dijual terdekat' },
|
||||
{ label: 'Lowongan Kerja', query: 'lowongan kerja terdekat' },
|
||||
{ label: 'Pupuk Terdekat', query: 'pupuk terdekat' },
|
||||
{ label: 'Rental Mobil', query: 'rental mobil terdekat' },
|
||||
{ label: 'Kurir Terdekat', query: 'kurir terdekat' },
|
||||
{ label: 'Jasa Terdekat', query: 'jasa terdekat' },
|
||||
{ label: 'Wifi Terdekat', query: 'wifi terdekat' },
|
||||
{ label: 'Kantor BPN Terdekat', query: 'kantor bpn terdekat' },
|
||||
{ label: 'Kantor Camat Terdekat', query: 'kantor camat terdekat' },
|
||||
{ label: 'Samsat Terdekat', query: 'samsat terdekat' },
|
||||
{ label: 'Kantor PLN Terdekat', query: 'kantor pln terdekat' },
|
||||
{ label: 'Toko Terdekat', query: 'toko terdekat' },
|
||||
];
|
||||
|
||||
const hyperlocalPatternLevels: PatternLevel[] = [
|
||||
@ -924,7 +1006,7 @@ export default function Starter() {
|
||||
lat: nextLocation.lat,
|
||||
lng: nextLocation.lng,
|
||||
radiusKm: nextRadiusKm,
|
||||
limit: 18,
|
||||
limit: 30,
|
||||
},
|
||||
});
|
||||
|
||||
@ -932,6 +1014,7 @@ export default function Starter() {
|
||||
setSearchMeta({
|
||||
count: Number(response.data?.count || 0),
|
||||
radius_km: response.data?.radius_km,
|
||||
effective_radius_km: response.data?.effective_radius_km,
|
||||
radius_zone: response.data?.radius_zone || null,
|
||||
radius_zones: Array.isArray(response.data?.radius_zones)
|
||||
? response.data.radius_zones
|
||||
@ -1178,7 +1261,7 @@ export default function Starter() {
|
||||
<input
|
||||
value={query}
|
||||
onChange={(event) => setQuery(event.target.value)}
|
||||
placeholder='Cari “kantor BPN”, “kantor camat”, “Samsat”, “SPBU terdekat”, “nasi goreng dekat saya”...'
|
||||
placeholder='Cari “warteg terdekat”, “toko bahan bangunan”, “service laptop”, “smartphone”, “Samsat”, “SPBU terdekat”...'
|
||||
className='h-14 w-full rounded-2xl border border-[#E0D6C3] bg-[#FCFAF5] pl-12 pr-4 text-sm outline-none transition focus:border-[#2CA58D] focus:ring-4 focus:ring-[#2CA58D]/15'
|
||||
/>
|
||||
</label>
|
||||
@ -1226,7 +1309,8 @@ export default function Starter() {
|
||||
|
||||
<div className='mt-6 inline-flex rounded-full border border-white/15 bg-white/10 px-4 py-2 text-sm font-bold text-white/80'>
|
||||
Kategori pencarian dikosongkan otomatis — hasil ditentukan
|
||||
dari kata kunci dan jarak.
|
||||
dari kata kunci dan jarak. GeoSeek mengejar minimal 10 hasil
|
||||
terdekat bila data tersedia.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -1319,7 +1403,7 @@ export default function Starter() {
|
||||
. Ditemukan {searchMeta.count} hasil dari{' '}
|
||||
{searchMeta.total_candidates} kandidat terindeks.
|
||||
{searchMeta.expanded_for_nearest
|
||||
? ' Radius awal kosong, jadi hasil diperluas ke kandidat terdekat dan tetap diurutkan berdasarkan jarak.'
|
||||
? ` Radius awal ${formatRadius(radiusKm)} belum memenuhi target minimal 10 hasil, jadi GeoSeek memperluas pencarian sampai ${formatRadius(searchMeta.effective_radius_km || radiusKm)} dan tetap mengurutkan berdasarkan jarak.`
|
||||
: ''}
|
||||
</p>
|
||||
</div>
|
||||
@ -1526,10 +1610,24 @@ export default function Starter() {
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p className='mt-4 text-sm text-[#5D6B62]'>
|
||||
{place.address ||
|
||||
[place.city, place.province].filter(Boolean).join(', ')}
|
||||
</p>
|
||||
<div className='mt-4 rounded-2xl bg-[#F7F2E8] p-4 text-sm text-[#5D6B62]'>
|
||||
<p className='text-xs font-black uppercase tracking-wide text-[#087F6D]'>
|
||||
Alamat / lokasi penjual
|
||||
</p>
|
||||
<p className='mt-1 font-semibold'>
|
||||
{place.address ||
|
||||
[place.city, place.province].filter(Boolean).join(', ') ||
|
||||
(place.latitude && place.longitude
|
||||
? `${place.latitude}, ${place.longitude}`
|
||||
: 'Alamat detail belum tersedia')}
|
||||
</p>
|
||||
<p className='mt-1 text-xs font-bold text-[#6A7A70]'>
|
||||
Sumber:{' '}
|
||||
{place.external_source === 'openstreetmap'
|
||||
? 'OpenStreetMap'
|
||||
: 'Database GeoSeek'}
|
||||
</p>
|
||||
</div>
|
||||
<div className='mt-auto pt-5'>
|
||||
<Link
|
||||
href={buildPlaceHref(place)}
|
||||
@ -1555,17 +1653,26 @@ export default function Starter() {
|
||||
) : (
|
||||
<div className='rounded-[2rem] border border-dashed border-[#CDBF9E] bg-white p-10 text-center'>
|
||||
<h3 className='text-2xl font-black'>
|
||||
Belum ada hasil dalam radius ini
|
||||
Data asli belum ditemukan untuk kata kunci ini
|
||||
</h3>
|
||||
<p className='mx-auto mt-3 max-w-xl text-[#5D6B62]'>
|
||||
Perbesar radius ke City/Regional Zone, coba kata kunci seperti
|
||||
“kantor BPN”, “kantor camat”, “Samsat”, “cafe melayu”, atau
|
||||
minta admin menambahkan listing baru.
|
||||
<p className='mx-auto mt-3 max-w-2xl text-[#5D6B62]'>
|
||||
GeoSeek sudah mencoba memperluas radius dan mencari dari database
|
||||
GeoSeek + OpenStreetMap. Sistem tidak membuat alamat palsu; jika
|
||||
sumber publik belum punya data, tambahkan listing resmi agar
|
||||
pencarian seperti “warteg terdekat” atau “toko bahan bangunan”
|
||||
tidak kosong.
|
||||
</p>
|
||||
<div className='mt-6'>
|
||||
<div className='mt-6 flex flex-wrap justify-center gap-3'>
|
||||
<button
|
||||
type='button'
|
||||
onClick={() => setRadiusKm(100)}
|
||||
className='rounded-full bg-[#073B3A] px-5 py-3 text-sm font-black text-white transition hover:bg-[#087F6D]'
|
||||
>
|
||||
Perluas radius 100 km
|
||||
</button>
|
||||
<BaseButton
|
||||
href='/login'
|
||||
label='Masuk panel admin'
|
||||
label='Tambah listing resmi'
|
||||
color='warning'
|
||||
roundedFull
|
||||
/>
|
||||
@ -1587,7 +1694,7 @@ export default function Starter() {
|
||||
Klik chip untuk langsung live search. GeoSeek mengenali intent
|
||||
seperti terdekat, dekat saya, near me, buka sekarang, 24 jam,
|
||||
radius, jenis usaha, kota, kecamatan, rating, populer, murah,
|
||||
terbaru, terverifikasi, kantor pemerintahan, dan BUMN/BUMD.
|
||||
terbaru, terverifikasi, produk, jasa, properti, kantor pemerintahan, dan BUMN/BUMD.
|
||||
</p>
|
||||
</div>
|
||||
<div className='rounded-[2rem] bg-white p-5 text-sm font-bold text-[#5D6B62] shadow-sm'>
|
||||
@ -1635,8 +1742,8 @@ export default function Starter() {
|
||||
Kombinasi kata kunci
|
||||
</p>
|
||||
<h3 className='text-2xl font-black'>
|
||||
Kuliner, kesehatan, otomotif, belanja, wisata, pemerintahan
|
||||
& BUMN
|
||||
Produk, jasa, kuliner, properti, logistik, pemerintahan
|
||||
& semua intent hyperlocal
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
@ -1681,7 +1788,7 @@ export default function Starter() {
|
||||
size={22}
|
||||
className='text-[#087F6D]'
|
||||
/>{' '}
|
||||
Top 20 keyword trafik tertinggi
|
||||
Keyword trafik tertinggi
|
||||
</div>
|
||||
<div className='flex flex-wrap gap-2'>
|
||||
{topTrafficKeywords.map((keyword, index) => (
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user