301

SEO Redirect Gateway

Job Posting Link Shortener

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.

apache
# 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.

1
Visitor/Googlebot hits website.com/jobs/staff-it-jakarta-2024
.htaccess mod_rewrite
2
Rewrite ke index.php?slug=staff-it-jakarta-2024
3
Lookup slug di $url_map (PHP array)
FOUND
HTTP 301
→ target URL
NOT FOUND
Buka urls.json
FOUND
HTTP 301
NOT FOUND
FALLBACK

Daftar Link Aktif

8 link terdaftar — klik slug untuk membuka clean URL, klik target untuk membuka URL tujuan.

4 Railway4 Raisely
IDSlug / Clean URLURL TujuanStatus
101
/jobs/staff-it-jakarta-2024Staff IT Jakarta 2024
Railway
102
/jobs/marketing-manager-surabayaMarketing Manager Surabaya
Railway
103
/jobs/frontend-developer-remoteFrontend Developer Remote
Railway
104
/jobs/data-analyst-bandungData Analyst Bandung
Railway
105
/jobs/seeyouatworktomorrow-ep1See You At Work Tomorrow — Ep.1
Raisely
106
/jobs/seeyouatworktomorrow-ep2See You At Work Tomorrow — Ep.2
Raisely
107
/jobs/tomorrowswork-ep1Tomorrow's Work — Ep.1
Raisely
108
/jobs/tomorrowswork-ep2Tomorrow's Work — Ep.2
Raisely

Struktur Sitemap

website.com/jobs/301 → jobseeknow.up.railway.app/job/detail/*

website.com/jobs/seeyouatworktomorrow-ep1301 → seeyouatworktomorrow-ep1.raiselysite.com

website.com/jobs/seeyouatworktomorrow-ep2301 → seeyouatworktomorrowe-p2.raiselysite.com

website.com/jobs/tomorrowswork-ep1301 → tomorrowswork-ep1.raiselysite.com

website.com/jobs/tomorrowswork-ep2301 → 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
<?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.

FileBagianYang Diubah
index.phpdefine('FALLBACK_URL', ...)Sudah diset ke jobseeknow.up.railway.app — ganti jika domain berubah
index.phpArray $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.jsonSemua objekTambah entri baru — edit tanpa menyentuh PHP
.htaccessRewriteBase /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

01

Upload 4 file ke root direktori web Anda

Letakkan index.php, go.php, urls.json, dan .htaccess di folder public_html atau www.

02

Domain Railway sudah terpasang

Semua URL sudah mengarah ke jobseeknow.up.railway.app — tidak perlu ganti placeholder lagi.

03

Isi data URL di urls.json atau array PHP

Tambahkan pasangan slug → URL tujuan. Format JSON lebih mudah diedit, array PHP lebih cepat.

04

Test di browser

Buka website.com/jobs/seeyouatworktomorrow-ep1 — browser harus langsung diarahkan ke seeyouatworktomorrow-ep1.raiselysite.com.

05

Verifikasi header di Google Search Console

Gunakan fitur URL Inspection di GSC dan pastikan Googlebot melihat status 301, bukan 200 atau 302.