{"id":5598,"date":"2026-08-25T14:31:01","date_gmt":"2026-08-25T14:31:01","guid":{"rendered":"https:\/\/yamuparkoti.com\/short-url\/"},"modified":"2026-08-25T14:32:48","modified_gmt":"2026-08-25T14:32:48","slug":"short-url","status":"publish","type":"page","link":"https:\/\/yamuparkoti.com\/ja\/short-url\/","title":{"rendered":"Short URL Generator"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<div class=\"wp-block-bplugins-custom-html\" id='bPluginsCustomHtml-1'>\n<style>\n    .su-wrap {\n        --primary: #2196F3;\n        --primary-dark: #1976D2;\n        --accent: #4CAF50;\n        --text: #f0f0f0;\n        --text-light: #b0b0b0;\n        --background: #17171f;\n        --card-bg: #1d1d26;\n        --border: #2a2a33;\n        --danger: #ef5350;\n        --radius: 10px;\n        --transition: all 0.25s ease;\n        background: var(--background);\n        color: var(--text);\n        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n        padding: 32px 18px 40px;\n        border-radius: var(--radius);\n        position: relative;\n    }\n    body.dark-mode .su-wrap { --background: #121212; --card-bg: #1e1e1e; --border: #333; }\n\n    .su-wrap * { box-sizing: border-box; }\n    .su-inner { max-width: 780px; margin: 0 auto; }\n\n    .su-head { text-align: center; margin-bottom: 26px; }\n    .su-head h2 {\n        margin: 0 0 8px; font-size: 30px; line-height: 1.25; color: var(--text); font-weight: 700;\n    }\n    .su-head p { margin: 0; color: var(--text-light); font-size: 15px; }\n\n    .su-theme-btn {\n        position: absolute; top: 14px; right: 14px; width: 40px; height: 40px;\n        border-radius: 50%; border: 1px solid var(--border); background: var(--card-bg);\n        color: var(--text); font-size: 17px; cursor: pointer; line-height: 1;\n        transition: var(--transition);\n    }\n    .su-theme-btn:hover { border-color: var(--primary); }\n\n    .su-card {\n        background: var(--card-bg); border: 1px solid var(--border);\n        border-radius: var(--radius); padding: 22px;\n    }\n\n    .su-label { display: block; font-size: 13px; color: var(--text-light); margin: 0 0 7px; }\n\n    .su-input, .su-short-out {\n        width: 100%; padding: 14px 15px; font-size: 16px;\n        background: var(--background); color: var(--text);\n        border: 1px solid var(--border); border-radius: 8px;\n        transition: var(--transition); font-family: inherit;\n    }\n    .su-input:focus, .su-short-out:focus {\n        outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.18);\n    }\n    .su-input::placeholder { color: #6b6b78; }\n\n    .su-btn {\n        display: inline-block; width: 100%; margin-top: 14px; padding: 14px 20px;\n        background: var(--primary); color: #fff; border: none; border-radius: 8px;\n        font-size: 16px; font-weight: 600; cursor: pointer; transition: var(--transition);\n        font-family: inherit;\n    }\n    .su-btn:hover { background: var(--primary-dark); }\n    .su-btn:disabled { opacity: 0.6; cursor: not-allowed; }\n\n    .su-link-btn {\n        background: none; border: none; color: var(--primary); font-size: 13px;\n        cursor: pointer; padding: 12px 0 0; font-family: inherit;\n    }\n    .su-link-btn:hover { text-decoration: underline; }\n\n    .su-custom-panel { display: none; margin-top: 10px; }\n    .su-preview {\n        margin-top: 8px; font-size: 13px; color: var(--text-light);\n        word-break: break-all; font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n    }\n    .su-preview-set { color: var(--accent); }\n\n    .su-status { display: none; margin-top: 14px; padding: 11px 14px; border-radius: 8px; font-size: 14px; }\n    .su-ok  { background: rgba(76, 175, 80, 0.12); color: #7dd382; border: 1px solid rgba(76, 175, 80, 0.3); }\n    .su-err { background: rgba(239, 83, 80, 0.12); color: #ff8a86; border: 1px solid rgba(239, 83, 80, 0.32); }\n\n    .su-result { display: none; margin-top: 18px; padding: 20px; background: var(--card-bg);\n                 border: 1px solid var(--primary); border-radius: var(--radius); }\n    .su-result-title { font-size: 13px; color: var(--text-light); margin: 0 0 9px; }\n    .su-short-row { display: flex; gap: 9px; flex-wrap: wrap; }\n    .su-short-out {\n        flex: 1 1 240px; font-weight: 600; color: var(--primary);\n        font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n    }\n    .su-action {\n        padding: 0 18px; border-radius: 8px; border: 1px solid var(--border);\n        background: var(--background); color: var(--text); font-size: 14px; font-weight: 600;\n        cursor: pointer; transition: var(--transition); font-family: inherit; white-space: nowrap;\n    }\n    .su-action:hover { border-color: var(--primary); color: var(--primary); }\n    .su-action.su-copied { background: var(--accent); border-color: var(--accent); color: #fff; }\n    a.su-action { display: inline-flex; align-items: center; text-decoration: none; }\n    .su-dest { margin-top: 11px; font-size: 13px; color: var(--text-light); word-break: break-all; }\n\n    .su-history { display: none; margin-top: 26px; }\n    .su-history-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 11px; }\n    .su-history-head h3 { margin: 0; font-size: 16px; color: var(--text); font-weight: 600; }\n    .su-item {\n        display: flex; align-items: center; gap: 11px; padding: 12px 14px;\n        background: var(--card-bg); border: 1px solid var(--border);\n        border-radius: 8px; margin-bottom: 8px;\n    }\n    .su-item-main { flex: 1 1 auto; min-width: 0; }\n    .su-item-short {\n        display: block; color: var(--primary); text-decoration: none; font-weight: 600; font-size: 14px;\n        font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n    }\n    .su-item-short:hover { text-decoration: underline; }\n    .su-item-dest {\n        font-size: 12px; color: var(--text-light); margin-top: 3px;\n        white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n    }\n    .su-item-clicks { font-size: 12px; color: var(--text-light); white-space: nowrap; }\n    .su-mini {\n        padding: 6px 11px; font-size: 12px; border-radius: 6px; cursor: pointer;\n        background: var(--background); color: var(--text); border: 1px solid var(--border);\n        transition: var(--transition); font-family: inherit;\n    }\n    .su-mini:hover { border-color: var(--primary); color: var(--primary); }\n    .su-mini.su-copied { background: var(--accent); border-color: var(--accent); color: #fff; }\n    .su-mini-x { padding: 6px 10px; font-size: 15px; line-height: 1; }\n    .su-mini-x:hover { border-color: var(--danger); color: var(--danger); }\n\n    .su-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; margin-top: 26px; }\n    .su-fact { background: var(--card-bg); border: 1px solid var(--border); border-radius: 8px; padding: 15px; }\n    .su-fact strong { display: block; color: var(--text); font-size: 14px; margin-bottom: 4px; }\n    .su-fact span { color: var(--text-light); font-size: 13px; line-height: 1.5; }\n\n    @media (max-width: 600px) {\n        .su-wrap { padding: 26px 13px 32px; }\n        .su-head h2 { font-size: 24px; }\n        .su-action { width: 100%; justify-content: center; padding: 12px; }\n        .su-item { flex-wrap: wrap; }\n        .su-item-main { flex: 1 1 100%; }\n    }\n<\/style>\n\n<div class=\"su-wrap\">\n    <button type=\"button\" class=\"su-theme-btn\" id=\"su-theme\" aria-label=\"Toggle dark mode\">\ud83c\udf19<\/button>\n\n    <div class=\"su-inner\">\n        <div class=\"su-head\">\n            <h2>Short URL Generator<\/h2>\n            <p>Turn a long link into a short, tidy one you can share anywhere. Free, no sign-up.<\/p>\n        <\/div>\n\n        <form class=\"su-card\" id=\"su-form\">\n            <label class=\"su-label\" for=\"su-url\">Paste your long URL<\/label>\n            <input type=\"url\" class=\"su-input\" id=\"su-url\" name=\"url\"\n                   placeholder=\"https:\/\/example.com\/a\/very\/long\/link\" autocomplete=\"off\"\n                   inputmode=\"url\" spellcheck=\"false\" aria-describedby=\"su-status\">\n\n            <button type=\"button\" class=\"su-link-btn\" id=\"su-custom-toggle\" aria-expanded=\"false\"\n                    aria-controls=\"su-custom\">+ Use a custom alias<\/button>\n\n            <div class=\"su-custom-panel\" id=\"su-custom\">\n                <label class=\"su-label\" for=\"su-alias\">Custom alias (optional)<\/label>\n                <input type=\"text\" class=\"su-input\" id=\"su-alias\" name=\"alias\"\n                       placeholder=\"my-offer\" autocomplete=\"off\" spellcheck=\"false\"\n                       maxlength=\"32\" pattern=\"[A-Za-z0-9_-]{3,32}\">\n                <div class=\"su-preview\" id=\"su-preview\">yamuparkoti.com\/s\/your-alias<\/div>\n            <\/div>\n\n            <button type=\"submit\" class=\"su-btn\" id=\"su-go\">Shorten URL<\/button>\n            <div class=\"su-status\" id=\"su-status\" role=\"status\" aria-live=\"polite\"><\/div>\n        <\/form>\n\n        <div class=\"su-result\" id=\"su-result\">\n            <p class=\"su-result-title\">Your short link<\/p>\n            <div class=\"su-short-row\">\n                <input type=\"text\" class=\"su-short-out\" id=\"su-short\" readonly>\n                <button type=\"button\" class=\"su-action\" id=\"su-copy\">Copy<\/button>\n                <a class=\"su-action\" id=\"su-open\" href=\"#\" target=\"_blank\" rel=\"noopener\">Open<\/a>\n            <\/div>\n            <div class=\"su-dest\" id=\"su-dest\"><\/div>\n        <\/div>\n\n        <div class=\"su-history\" id=\"su-history\">\n            <div class=\"su-history-head\">\n                <h3>Your links<\/h3>\n                <button type=\"button\" class=\"su-mini\" id=\"su-clear\">Clear list<\/button>\n            <\/div>\n            <div id=\"su-list\"><\/div>\n        <\/div>\n\n        <div class=\"su-facts\">\n            <div class=\"su-fact\">\n                <strong>Links never expire<\/strong>\n                <span>Once created, a short link keeps working. There is no time limit and no account needed.<\/span>\n            <\/div>\n            <div class=\"su-fact\">\n                <strong>Custom aliases<\/strong>\n                <span>Choose your own ending, so a link can read as a name instead of random characters.<\/span>\n            <\/div>\n            <div class=\"su-fact\">\n                <strong>Click counts<\/strong>\n                <span>Every link tracks how many times it was opened. Totals only, no visitor tracking.<\/span>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n(function () {\n    'use strict';\n\n    \/\/ NOTE FOR FUTURE EDITS: this site's render filter rewrites a bare ampersand into a\n    \/\/ numeric HTML entity, and entities are NOT decoded inside a script element. One literal\n    \/\/ ampersand here is a fatal SyntaxError that kills the whole tool. The corruption is\n    \/\/ inconsistent - some survive, some do not - so never rely on \"that one worked\".\n    \/\/ Never use the AND operator in this file. Use nested ifs or Array.every. OR is safe.\n\n    var API = '\/wp-json\/yam\/v1';\n    var STORE = 'yam-su-links';\n    var MAX_STORED = 25;\n\n    var $ = function (id) { return document.getElementById(id); };\n\n    \/* ------------------------------------------------------------ storage *\/\n\n    function load() {\n        try {\n            var raw = localStorage.getItem(STORE);\n            if (!raw) { return []; }\n            var list = JSON.parse(raw);\n            return Object.prototype.toString.call(list) === '[object Array]' ? list : [];\n        } catch (e) { return []; }\n    }\n\n    function save(list) {\n        try { localStorage.setItem(STORE, JSON.stringify(list.slice(0, MAX_STORED))); } catch (e) {}\n    }\n\n    function remember(rec) {\n        var list = load().filter(function (r) { return r.code !== rec.code; });\n        list.unshift(rec);\n        save(list);\n        renderList();\n    }\n\n    \/* -------------------------------------------------------------- helpers *\/\n\n    function setStatus(msg, kind) {\n        var box = $('su-status');\n        if (!box) { return; }\n        box.textContent = msg || '';\n        box.className = 'su-status' + (kind ? ' su-' + kind : '');\n        box.style.display = msg ? 'block' : 'none';\n    }\n\n    function busy(on) {\n        var btn = $('su-go');\n        if (!btn) { return; }\n        btn.disabled = on;\n        btn.textContent = on ? 'Shortening...' : 'Shorten URL';\n    }\n\n    function copy(text, btn) {\n        var done = function () {\n            if (!btn) { return; }\n            var old = btn.textContent;\n            btn.textContent = 'Copied';\n            btn.classList.add('su-copied');\n            setTimeout(function () { btn.textContent = old; btn.classList.remove('su-copied'); }, 1600);\n        };\n        if (navigator.clipboard) {\n            navigator.clipboard.writeText(text).then(done, function () { fallbackCopy(text, done); });\n        } else {\n            fallbackCopy(text, done);\n        }\n    }\n\n    function fallbackCopy(text, done) {\n        var ta = document.createElement('textarea');\n        ta.value = text;\n        ta.setAttribute('readonly', '');\n        ta.style.position = 'fixed';\n        ta.style.left = '-9999px';\n        document.body.appendChild(ta);\n        ta.select();\n        try { document.execCommand('copy'); done(); } catch (e) {}\n        document.body.removeChild(ta);\n    }\n\n    function shortHost() {\n        return location.host + '\/s\/';\n    }\n\n    \/* --------------------------------------------------------------- create *\/\n\n    function shorten() {\n        var urlField = $('su-url');\n        var aliasField = $('su-alias');\n        var url = urlField ? urlField.value.trim() : '';\n        var alias = aliasField ? aliasField.value.trim() : '';\n\n        if (!url) {\n            setStatus('Please paste a link first.', 'err');\n            if (urlField) { urlField.focus(); }\n            return;\n        }\n\n        busy(true);\n        setStatus('');\n\n        var body = { url: url };\n        if (alias) { body.alias = alias; }\n\n        fetch(API + '\/shorten', {\n            method: 'POST',\n            headers: { 'Content-Type': 'application\/json' },\n            body: JSON.stringify(body)\n        }).then(function (r) {\n            return r.json().then(function (j) { return { ok: r.ok, status: r.status, data: j }; });\n        }).then(function (res) {\n            busy(false);\n            if (!res.ok) {\n                var msg = res.data ? res.data.message : '';\n                if (!msg) { msg = 'Something went wrong (HTTP ' + res.status + ').'; }\n                if (res.status === 404) {\n                    msg = 'The shortener service is not responding. If you are the site owner, check that the Yam Short Links plugin is active.';\n                }\n                setStatus(msg, 'err');\n                return;\n            }\n            showResult(res.data);\n            remember({\n                code: res.data.code, short_url: res.data.short_url,\n                url: res.data.url, created: Date.now(), clicks: res.data.clicks || 0\n            });\n            setStatus(res.data.reused\n                ? 'You had already shortened this link, so here is the same short URL.'\n                : 'Short link created.', 'ok');\n            if (aliasField) { aliasField.value = ''; }\n        }).catch(function () {\n            busy(false);\n            setStatus('Could not reach the server. Please check your connection and try again.', 'err');\n        });\n    }\n\n    function showResult(data) {\n        var box = $('su-result');\n        if (!box) { return; }\n        var out = $('su-short');\n        if (out) {\n            out.value = data.short_url;\n            out.setAttribute('aria-label', 'Your short link: ' + data.short_url);\n        }\n        var dest = $('su-dest');\n        if (dest) {\n            dest.textContent = data.url;\n            dest.setAttribute('title', data.url);\n        }\n        var open = $('su-open');\n        if (open) { open.href = data.short_url; }\n        box.style.display = 'block';\n        box.setAttribute('aria-live', 'polite');\n    }\n\n    \/* ---------------------------------------------------------- saved links *\/\n\n    function renderList() {\n        var host = $('su-list');\n        var wrap = $('su-history');\n        if (!host) { return; }\n        var list = load();\n        if (wrap) { wrap.style.display = list.length ? 'block' : 'none'; }\n        host.innerHTML = '';\n\n        list.forEach(function (rec) {\n            var row = document.createElement('div');\n            row.className = 'su-item';\n\n            var main = document.createElement('div');\n            main.className = 'su-item-main';\n\n            var a = document.createElement('a');\n            a.className = 'su-item-short';\n            a.href = rec.short_url;\n            a.target = '_blank';\n            a.rel = 'noopener';\n            a.textContent = rec.short_url.replace(\/^https?:\\\/\\\/\/, '');\n            main.appendChild(a);\n\n            var dest = document.createElement('div');\n            dest.className = 'su-item-dest';\n            \/\/ textContent, never innerHTML: the destination is attacker-controlled text.\n            dest.textContent = rec.url;\n            dest.title = rec.url;\n            main.appendChild(dest);\n            row.appendChild(main);\n\n            var clicks = document.createElement('span');\n            clicks.className = 'su-item-clicks';\n            clicks.setAttribute('data-code', rec.code);\n            clicks.textContent = (rec.clicks || 0) + ' clicks';\n            row.appendChild(clicks);\n\n            var cp = document.createElement('button');\n            cp.type = 'button';\n            cp.className = 'su-mini';\n            cp.textContent = 'Copy';\n            cp.addEventListener('click', function () { copy(rec.short_url, cp); });\n            row.appendChild(cp);\n\n            var rm = document.createElement('button');\n            rm.type = 'button';\n            rm.className = 'su-mini su-mini-x';\n            rm.textContent = '\u00d7';\n            rm.setAttribute('aria-label', 'Remove ' + rec.short_url + ' from this list');\n            rm.addEventListener('click', function () {\n                save(load().filter(function (r) { return r.code !== rec.code; }));\n                renderList();\n            });\n            row.appendChild(rm);\n\n            host.appendChild(row);\n        });\n    }\n\n    \/\/ Click counts are per-link, so refresh them lazily rather than on every keystroke.\n    function refreshClicks() {\n        var list = load();\n        if (!list.length) { return; }\n        list.slice(0, 10).forEach(function (rec) {\n            fetch(API + '\/stats?code=' + encodeURIComponent(rec.code))\n                .then(function (r) { return r.ok ? r.json() : null; })\n                .then(function (j) {\n                    if (!j) { return; }\n                    var node = document.querySelector('.su-item-clicks[data-code=\"' + rec.code + '\"]');\n                    if (node) { node.textContent = j.clicks + (j.clicks === 1 ? ' click' : ' clicks'); }\n                    var stored = load();\n                    stored.forEach(function (s) { if (s.code === rec.code) { s.clicks = j.clicks; } });\n                    save(stored);\n                })\n                .catch(function () {});\n        });\n    }\n\n    \/* ------------------------------------------------------------------ init *\/\n\n    function init() {\n        var go = $('su-go');\n        if (go) { go.addEventListener('click', shorten); }\n\n        var form = $('su-form');\n        if (form) { form.addEventListener('submit', function (e) { e.preventDefault(); shorten(); }); }\n\n        var url = $('su-url');\n        if (url) {\n            url.addEventListener('keydown', function (e) {\n                if (e.key === 'Enter') { e.preventDefault(); shorten(); }\n            });\n        }\n\n        var toggle = $('su-custom-toggle');\n        var panel = $('su-custom');\n        if (toggle) {\n            if (panel) {\n                toggle.addEventListener('click', function () {\n                    var open = panel.style.display === 'block';\n                    panel.style.display = open ? 'none' : 'block';\n                    toggle.setAttribute('aria-expanded', open ? 'false' : 'true');\n                    toggle.textContent = open ? '+ Use a custom alias' : '\u2212 Use a custom alias';\n                    if (!open) { var a = $('su-alias'); if (a) { a.focus(); } }\n                });\n            }\n        }\n\n        var alias = $('su-alias');\n        var preview = $('su-preview');\n        if (alias) {\n            if (preview) {\n                var paint = function () {\n                    var v = alias.value.trim();\n                    preview.textContent = shortHost() + (v || 'your-alias');\n                    preview.classList.toggle('su-preview-set', !!v);\n                };\n                alias.addEventListener('input', paint);\n                paint();\n            }\n        }\n\n        var cp = $('su-copy');\n        if (cp) {\n            cp.addEventListener('click', function () {\n                var out = $('su-short');\n                if (out) { copy(out.value, cp); }\n            });\n        }\n\n        var out = $('su-short');\n        if (out) { out.addEventListener('focus', function () { out.select(); }); }\n\n        var clear = $('su-clear');\n        if (clear) {\n            clear.addEventListener('click', function () {\n                if (window.confirm('Clear your saved links from this browser? The short links themselves keep working.')) {\n                    save([]);\n                    renderList();\n                }\n            });\n        }\n\n        var dark = $('su-theme');\n        if (dark) {\n            var saved = null;\n            try { saved = localStorage.getItem('su-theme'); } catch (e) { saved = null; }\n            if (saved === 'light') { document.body.classList.remove('dark-mode'); }\n            if (saved === 'dark') { document.body.classList.add('dark-mode'); }\n            dark.textContent = document.body.classList.contains('dark-mode') ? '\u2600\ufe0f' : '\ud83c\udf19';\n            dark.setAttribute('aria-label', 'Toggle dark mode');\n            dark.addEventListener('click', function () {\n                document.body.classList.toggle('dark-mode');\n                var on = document.body.classList.contains('dark-mode');\n                dark.textContent = on ? '\u2600\ufe0f' : '\ud83c\udf19';\n                try { localStorage.setItem('su-theme', on ? 'dark' : 'light'); } catch (e) {}\n            });\n        }\n\n        renderList();\n        refreshClicks();\n    }\n\n    \/\/ Never assume DOMContentLoaded has not fired yet: if anything defers or relocates this\n    \/\/ script that assumption silently leaves every control unwired.\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', init);\n    } else {\n        init();\n    }\n})();\n<\/script><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">What this URL shortener does<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A long web address is awkward to share. It wraps onto two lines in a message, it gets cut off in a social media bio, and it is impossible to read aloud or type from a printed page. This tool takes any http or https link and gives you a short one in its place, in the form <code>yamuparkoti.com\/s\/ab12cd<\/code>. Open the short link and it forwards straight to the original address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The short links are hosted here on yamuparkoti.com rather than on a third-party service. That means they do not stop working if some other company changes its pricing or shuts down, and there is no account, no email address and no payment involved at any point.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to shorten a link<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Paste the full address into the box above. If you leave off the <code>https:\/\/<\/code> it will be added for you.<\/li>\n\n\n<li>If you want the link to read as a word rather than random characters, open <strong>Use a custom alias<\/strong> and type one.<\/li>\n\n\n<li>Press <strong>Shorten URL<\/strong>. Your short link appears straight away with a Copy button next to it.<\/li>\n\n\n<li>Paste it wherever you need it. It stays saved in the list on this page so you can find it again.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Custom aliases<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">By default the tool picks a random six-character code. A custom alias lets you replace that with something meaningful, so <code>yamuparkoti.com\/s\/spring-sale<\/code> is possible instead of <code>yamuparkoti.com\/s\/k7Rp2x<\/code>. An alias can be 3 to 32 characters long and may contain letters, numbers, hyphens and underscores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aliases are first come, first served: if somebody has already taken the one you want, the tool tells you and you can pick another. Random codes avoid the characters that are easy to misread, so there is no letter O next to a zero, and no capital I next to a lowercase L.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where short links are worth using<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Social media bios<\/strong> where you only get one link and very little space.<\/li>\n\n\n<li><strong>Printed material and slides<\/strong>, where somebody has to read the address and type it by hand.<\/li>\n\n\n<li><strong>Text messages<\/strong>, where a long URL eats the character limit.<\/li>\n\n\n<li><strong>QR codes<\/strong>, because a shorter address makes a simpler, more reliable code. You can generate one with the <a href=\"https:\/\/yamuparkoti.com\/qr-code-generator-free-online\/\">QR Code Generator<\/a>.<\/li>\n\n\n<li><strong>Measuring interest<\/strong>, since every short link counts how many times it was opened.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">About the click counter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Each short link keeps a running total of how many times it has been opened, shown next to the link in your list. It is a plain count and nothing more. No cookies are set on the person clicking, no profile is built, and no visitor details are stored against a click.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The list of links on this page is kept in your own browser storage, not in an account. Clearing your browser data will empty that list, but the short links themselves keep working for everybody who has them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Is it free?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, completely. There is no account, no sign-up, no trial and no limit on how many links you can make, beyond a modest cap per hour that exists only to stop automated abuse.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Do the short links expire?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. A link works until it is deliberately removed. Removing a link from the list on this page only hides it from your own view; it does not disable the link.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I shorten a link that is already short?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The tool will not shorten a link that already points at another shortener, or at a short link on this site. Chaining redirects together makes links slower and less trustworthy, so paste the original destination instead.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What kinds of links are allowed?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ordinary web addresses beginning with http or https. Anything else is refused, including scripts and local addresses. Shortening the same URL twice gives you the same short link back rather than creating a duplicate.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Will the short link change my destination page?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. The short link issues a permanent redirect to exactly the address you gave, with nothing appended and no interstitial page in between. Anyone who clicks it lands on your page directly.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I see how many people clicked?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, the count sits beside each link in your list on this page and updates when you reload. It counts openings of the short link, so repeat visits from the same person are all counted.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">More free tools<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If this was useful, these might be too: the <a href=\"https:\/\/yamuparkoti.com\/qr-code-generator-free-online\/\">QR Code Generator<\/a> turns your new short link into a scannable code, the <a href=\"https:\/\/yamuparkoti.com\/jpeg-pdf-dual-converter\/\">JPEG PDF Converter<\/a> moves files between images and PDFs, the <a href=\"https:\/\/yamuparkoti.com\/date-calculator-pro\/\">Date Calculator Pro<\/a> works out ages and working days, and the <a href=\"https:\/\/yamuparkoti.com\/word-count-checker\/\">Word Count Checker<\/a> counts words and characters.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Free URL shortener. Turn any long link into a short yamuparkoti.com\/s\/ address, pick your own custom alias, and see how many times it was clicked. No sign-up, no expiry.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-5598","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/yamuparkoti.com\/ja\/wp-json\/wp\/v2\/pages\/5598","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yamuparkoti.com\/ja\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/yamuparkoti.com\/ja\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/yamuparkoti.com\/ja\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yamuparkoti.com\/ja\/wp-json\/wp\/v2\/comments?post=5598"}],"version-history":[{"count":1,"href":"https:\/\/yamuparkoti.com\/ja\/wp-json\/wp\/v2\/pages\/5598\/revisions"}],"predecessor-version":[{"id":5601,"href":"https:\/\/yamuparkoti.com\/ja\/wp-json\/wp\/v2\/pages\/5598\/revisions\/5601"}],"wp:attachment":[{"href":"https:\/\/yamuparkoti.com\/ja\/wp-json\/wp\/v2\/media?parent=5598"}],"curies":[{"name":"\u3046\u30fc\u3093","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}