PHP Redirect Gateway untuk SEO Job Posting
Redirect gateway untuk jobseeknow.up.railway.app — mengalihkan URL pendek via HTTP 301 Moved Permanently agar Googlebot dapat merayapi dan mengindeks setiap halaman job posting. Terdiri dari 4 file — upload ke server Apache dan langsung aktif.
Format URL yang Didukung
Tiga format URL aktif secara bersamaan setelah upload.
# Format yang didukung:
# 1. Clean URL (via .htaccess)
website.com/jobs/seeyouatworktomorrow-ep1
website.com/jobs/tomorrowswork-ep1
# 2. Shortener-style
website.com/go/seeyouatworktomorrow-ep2
website.com/go/tomorrowswork-ep2
# 3. Parameter-based (tanpa .htaccess)
website.com/go.php?slug=seeyouatworktomorrow-ep1
website.com/go.php?id=105
# Target app (Railway)
https://jobseeknow.up.railway.app/Alur Kerja Redirect
Dari URL bersih hingga HTTP 301 — bagaimana setiap request diproses.
Daftar Link Aktif
8 link terdaftar — klik slug untuk membuka clean URL, klik target untuk membuka URL tujuan.
Struktur Sitemap
website.com/jobs/ → 301 → jobseeknow.up.railway.app/job/detail/*
website.com/jobs/seeyouatworktomorrow-ep1 → 301 → seeyouatworktomorrow-ep1.raiselysite.com
website.com/jobs/seeyouatworktomorrow-ep2 → 301 → seeyouatworktomorrowe-p2.raiselysite.com
website.com/jobs/tomorrowswork-ep1 → 301 → tomorrowswork-ep1.raiselysite.com
website.com/jobs/tomorrowswork-ep2 → 301 → tomorrowswork-ep2.raiselysite.com
Kode Lengkap — 4 File
Klik tab untuk beralih antar file. Gunakan tombol Salin lalu paste ke editor Anda.
Entry point utama. Baca slug dari clean URL (/jobs/slug), cek PHP array, fallback ke urls.json, kirim HTTP 301.
<?php
/**
* =============================================================================
* SEO JOB POSTING REDIRECT GATEWAY — index.php
* =============================================================================
* Fungsi : Membaca slug dari URL bersih (/jobs/slug) lalu mengalihkan
* pengunjung + Googlebot ke URL tujuan via HTTP 301 Moved Permanently.
* Alur : 1) Cek $url_map (PHP array statis) → cepat, O(1) lookup
* 2) Fallback ke urls.json → mudah diedit tanpa PHP
* 3) Tidak ditemukan → redirect ke FALLBACK_URL
* =============================================================================
*/
// ---------------------------------------------------------------------------
// KONFIGURASI UTAMA — sesuaikan dengan kebutuhan Anda
// ---------------------------------------------------------------------------
/** URL tujuan jika slug tidak ditemukan di array maupun urls.json */
define('FALLBACK_URL', 'https://jobseeknow.up.railway.app/');
/** Path ke file database URL eksternal (relatif terhadap file ini) */
define('JSON_FILE', __DIR__ . '/urls.json');
/** Prefix path yang digunakan di URL bersih, sesuai .htaccess */
define('URL_PREFIX', '/jobs/');
// ============================================================
// BAGIAN 1: DATABASE URL STATIS (PHP ARRAY)
// ============================================================
// Tambahkan pasangan slug => URL tujuan di sini.
// Format : 'slug-url-bersih' => 'https://target-url-lengkap.com/path'
// Contoh : 'staff-it-jakarta' => 'https://appbuilder.com/job/detail/123'
// ============================================================
$url_map = [
// === TAMBAHKAN URL ANDA DI BAWAH INI ===
'staff-it-jakarta-2024' => 'https://jobseeknow.up.railway.app/job/detail/101',
'marketing-manager-surabaya' => 'https://jobseeknow.up.railway.app/job/detail/102',
'frontend-developer-remote' => 'https://jobseeknow.up.railway.app/job/detail/103',
'data-analyst-bandung' => 'https://jobseeknow.up.railway.app/job/detail/104',
'seeyouatworktomorrow-ep1' => 'https://seeyouatworktomorrow-ep1.raiselysite.com/',
'seeyouatworktomorrow-ep2' => 'https://seeyouatworktomorrowe-p2.raiselysite.com/',
'tomorrowswork-ep1' => 'https://tomorrowswork-ep1.raiselysite.com/',
'tomorrowswork-ep2' => 'https://tomorrowswork-ep2.raiselysite.com/',
// === AKHIR BAGIAN URL STATIS ===
];
// ---------------------------------------------------------------------------
// FUNGSI: Normalisasi slug dari URL
// ---------------------------------------------------------------------------
function get_slug(): string
{
$slug = '';
if (!empty($_GET['slug'])) {
$slug = $_GET['slug'];
} elseif (!empty($_GET['id'])) {
$slug = $_GET['id'];
} elseif (!empty($_SERVER['PATH_INFO'])) {
$slug = $_SERVER['PATH_INFO'];
}
$slug = strtolower(trim($slug, " /"));
$slug = preg_replace('/[^a-z0-9\-_]/', '', $slug);
return $slug;
}
function redirect_301(string $target_url): void
{
$safe_url = filter_var($target_url, FILTER_VALIDATE_URL);
if ($safe_url === false) { $safe_url = FALLBACK_URL; }
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $safe_url);
header('Cache-Control: max-age=86400, public');
header('X-Robots-Tag: noindex, follow');
exit();
}
// ---------------------------------------------------------------------------
// EKSEKUSI UTAMA
// ---------------------------------------------------------------------------
$slug = get_slug();
if ($slug === '') { redirect_301(FALLBACK_URL); }
// ============================================================
// LANGKAH 1: Cek PHP Array Statis (prioritas utama)
// ============================================================
if (array_key_exists($slug, $url_map)) {
redirect_301($url_map[$slug]);
}
// ============================================================
// LANGKAH 2: Fallback ke urls.json (database eksternal)
// ============================================================
// Jika slug tidak ditemukan di array di atas, coba baca dari
// file urls.json — lebih mudah diedit tanpa menyentuh PHP.
// ============================================================
if (file_exists(JSON_FILE)) {
$json_content = file_get_contents(JSON_FILE);
if ($json_content !== false) {
$url_list = json_decode($json_content, true);
if (is_array($url_list)) {
// === LOGIKA PENCOCOKAN JSON ===
// Cocokkan field "slug" di urls.json dengan slug dari URL.
// Anda bisa ubah nama field sesuai struktur JSON Anda.
foreach ($url_list as $entry) {
if (
isset($entry['slug'], $entry['url']) &&
strtolower(trim($entry['slug'])) === $slug
) {
redirect_301($entry['url']);
}
}
// === AKHIR LOGIKA PENCOCOKAN JSON ===
}
}
}
// ============================================================
// LANGKAH 3: Slug tidak ditemukan → redirect ke FALLBACK_URL
// ============================================================
redirect_301(FALLBACK_URL);Yang Perlu Disesuaikan
Ganti nilai placeholder di bawah ini sebelum upload ke server.
| File | Bagian | Yang Diubah |
|---|---|---|
| index.php | define('FALLBACK_URL', ...) | Sudah diset ke jobseeknow.up.railway.app — ganti jika domain berubah |
| index.php | Array $url_map[] | Tambah/hapus pasangan slug → URL tujuan |
| go.php | $url_map_by_slug[] & $url_map_by_id[] | Sinkronkan dengan array di index.php |
| urls.json | Semua objek | Tambah entri baru — edit tanpa menyentuh PHP |
| .htaccess | RewriteBase / | Ganti / jika situs ada di subfolder (mis. /gateway/) |
Kenapa Ini SEO-Friendly?
Header HTTP yang sudah terpasang dan alasan teknis di baliknya.
301 Moved Permanently
Header HTTP 301 meneruskan PageRank & link equity secara penuh ke URL tujuan. Googlebot memperlakukannya sebagai pengalihan permanen.
Cache-Control: max-age=86400
Googlebot tidak perlu re-request URL yang sama selama 24 jam, mengurangi crawl budget yang terpakai.
X-Robots-Tag: noindex, follow
Halaman gateway tidak diindeks tersendiri. Hanya URL tujuan di web app builder Anda yang masuk index Google.
Clean URL Format
Slug /jobs/nama-posisi-kota-tahun terlihat natural dan relevan secara semantik — tidak seperti link spam atau redirect tracker.
Cara Upload ke Server
Upload 4 file ke root direktori web Anda
Letakkan index.php, go.php, urls.json, dan .htaccess di folder public_html atau www.
Domain Railway sudah terpasang
Semua URL sudah mengarah ke jobseeknow.up.railway.app — tidak perlu ganti placeholder lagi.
Isi data URL di urls.json atau array PHP
Tambahkan pasangan slug → URL tujuan. Format JSON lebih mudah diedit, array PHP lebih cepat.
Test di browser
Buka website.com/jobs/seeyouatworktomorrow-ep1 — browser harus langsung diarahkan ke seeyouatworktomorrow-ep1.raiselysite.com.
Verifikasi header di Google Search Console
Gunakan fitur URL Inspection di GSC dan pastikan Googlebot melihat status 301, bukan 200 atau 302.