<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://huudinh.github.io/blogs/blog</id>
    <title>Frontend Developer Blogs Blog</title>
    <updated>2026-02-06T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://huudinh.github.io/blogs/blog"/>
    <subtitle>Frontend Developer Blogs Blog</subtitle>
    <icon>https://huudinh.github.io/blogs/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Làm web trong thời đại AI]]></title>
        <id>https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai</id>
        <link href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai"/>
        <updated>2026-02-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tổng quan AI & JavaScript Frameworks trong kỷ nguyên AI, định hướng kiến trúc web trong thời đại AI]]></summary>
        <content type="html"><![CDATA[<p>Tổng quan AI &amp; JavaScript Frameworks trong kỷ nguyên AI, định hướng kiến trúc web trong thời đại AI</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-bối-cảnh-chung">1. Bối cảnh chung<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#1-b%E1%BB%91i-c%E1%BA%A3nh-chung" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Bối cảnh chung" title="Đường dẫn trực tiếp đến 1. Bối cảnh chung" translate="no">​</a></h2>
<p>Trong kỷ nguyên AI (Artificial Intelligence), cách <strong>con người – máy tìm kiếm – AI agent</strong> tiếp cận nội dung web đã thay đổi mạnh mẽ. Web không còn chỉ phục vụ người dùng cuối, mà còn phải phục vụ:</p>
<ul>
<li class="">AI chatbot (ChatGPT, Claude, Gemini…)</li>
<li class="">Search AI (Google SGE, Bing Copilot)</li>
<li class="">AI Agent tự động đọc – tóm tắt – trích xuất tri thức</li>
</ul>
<p>Điều này đặt ra một câu hỏi cốt lõi:</p>
<blockquote>
<p><strong>AI đọc và hiểu website bằng cách nào?</strong></p>
</blockquote>
<p>Câu trả lời nằm ở <strong>HTML đã render</strong>, không phải JavaScript runtime.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-ai-hiểu-nội-dung-web-như-thế-nào">2. AI hiểu nội dung web như thế nào?<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#2-ai-hi%E1%BB%83u-n%E1%BB%99i-dung-web-nh%C6%B0-th%E1%BA%BF-n%C3%A0o" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. AI hiểu nội dung web như thế nào?" title="Đường dẫn trực tiếp đến 2. AI hiểu nội dung web như thế nào?" translate="no">​</a></h2>
<p>AI (và bot nói chung) <strong>không chạy trình duyệt như con người</strong>:</p>
<ul>
<li class="">Không click</li>
<li class="">Không chờ JS fetch API</li>
<li class="">Không chạy React lifecycle</li>
</ul>
<p>AI chỉ hiểu:</p>
<ul>
<li class="">HTML có sẵn</li>
<li class="">Text tĩnh</li>
<li class="">Structured Data (Schema / JSON-LD)</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="công-thức-cốt-lõi">Công thức cốt lõi:<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#c%C3%B4ng-th%E1%BB%A9c-c%E1%BB%91t-l%C3%B5i" class="hash-link" aria-label="Đường dẫn trực tiếp đến Công thức cốt lõi:" title="Đường dẫn trực tiếp đến Công thức cốt lõi:" translate="no">​</a></h4>
<blockquote>
<p><strong>AI chỉ hiểu: Nội dung đã được render ra HTML ở thời điểm request</strong></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-javascript-và-bài-toán-ai-không-thấy-nội-dung">3. JavaScript và bài toán “AI không thấy nội dung”<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#3-javascript-v%C3%A0-b%C3%A0i-to%C3%A1n-ai-kh%C3%B4ng-th%E1%BA%A5y-n%E1%BB%99i-dung" class="hash-link" aria-label="Đường dẫn trực tiếp đến 3. JavaScript và bài toán “AI không thấy nội dung”" title="Đường dẫn trực tiếp đến 3. JavaScript và bài toán “AI không thấy nội dung”" translate="no">​</a></h2>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="javascript-client-side-csr">JavaScript Client-side (CSR)<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#javascript-client-side-csr" class="hash-link" aria-label="Đường dẫn trực tiếp đến JavaScript Client-side (CSR)" title="Đường dẫn trực tiếp đến JavaScript Client-side (CSR)" translate="no">​</a></h4>
<p>Mô hình phổ biến của React/Vue SPA:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">body</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">root</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">script</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">src</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bundle.js</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token script"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">script</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">body</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>Nội dung thật chỉ xuất hiện sau khi:</p>
<ul>
<li class="">JS load</li>
<li class="">API trả dữ liệu</li>
<li class="">Component render</li>
</ul>
<p>👉 Với AI: <strong>Trang web = rỗng</strong></p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-reactjs--vuejs--mạnh-cho-ui-yếu-cho-ai">4. ReactJS &amp; VueJS – Mạnh cho UI, yếu cho AI<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#4-reactjs--vuejs--m%E1%BA%A1nh-cho-ui-y%E1%BA%BFu-cho-ai" class="hash-link" aria-label="Đường dẫn trực tiếp đến 4. ReactJS &amp; VueJS – Mạnh cho UI, yếu cho AI" title="Đường dẫn trực tiếp đến 4. ReactJS &amp; VueJS – Mạnh cho UI, yếu cho AI" translate="no">​</a></h2>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="reactjs--vuejs-csr">ReactJS / VueJS CSR<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#reactjs--vuejs-csr" class="hash-link" aria-label="Đường dẫn trực tiếp đến ReactJS / VueJS CSR" title="Đường dẫn trực tiếp đến ReactJS / VueJS CSR" translate="no">​</a></h4>
<p><strong>Ưu điểm</strong>:</p>
<ul>
<li class="">UI động</li>
<li class="">SPA mượt</li>
<li class="">Phù hợp app nội bộ, dashboard</li>
</ul>
<p><strong>Nhược điểm trong kỷ nguyên AI</strong>:</p>
<ul>
<li class="">AI không đọc được nội dung</li>
<li class="">SEO kém</li>
<li class="">AI Search không hiểu context</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="bảng-tổng-hợp">Bảng tổng hợp<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#b%E1%BA%A3ng-t%E1%BB%95ng-h%E1%BB%A3p" class="hash-link" aria-label="Đường dẫn trực tiếp đến Bảng tổng hợp" title="Đường dẫn trực tiếp đến Bảng tổng hợp" translate="no">​</a></h4>
<table><thead><tr><th>Tiêu chí</th><th>React/Vue CSR</th></tr></thead><tbody><tr><td>UI</td><td>⭐⭐⭐⭐⭐</td></tr><tr><td>SEO</td><td>❌</td></tr><tr><td>AI hiểu nội dung</td><td>❌</td></tr><tr><td>AI Agent crawl</td><td>❌</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-server-side-rendering-ssr--static-generation-ssg">5. Server-Side Rendering (SSR) &amp; Static Generation (SSG)<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#5-server-side-rendering-ssr--static-generation-ssg" class="hash-link" aria-label="Đường dẫn trực tiếp đến 5. Server-Side Rendering (SSR) &amp; Static Generation (SSG)" title="Đường dẫn trực tiếp đến 5. Server-Side Rendering (SSR) &amp; Static Generation (SSG)" translate="no">​</a></h2>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="nguyên-lý">Nguyên lý<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#nguy%C3%AAn-l%C3%BD" class="hash-link" aria-label="Đường dẫn trực tiếp đến Nguyên lý" title="Đường dẫn trực tiếp đến Nguyên lý" translate="no">​</a></h4>
<ul>
<li class="">Nội dung được render <strong>trên server</strong></li>
<li class="">HTML trả về đã có text</li>
</ul>
<p>Ví dụ HTML SSR:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Bài viết về AI</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Nội dung chi tiết...</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>➡️ AI hiểu ngay lập tức.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-nextjs--vì-sao-là-xu-thế-thời-đại-ai">6. Next.js – Vì sao là xu thế thời đại AI?<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#6-nextjs--v%C3%AC-sao-l%C3%A0-xu-th%E1%BA%BF-th%E1%BB%9Di-%C4%91%E1%BA%A1i-ai" class="hash-link" aria-label="Đường dẫn trực tiếp đến 6. Next.js – Vì sao là xu thế thời đại AI?" title="Đường dẫn trực tiếp đến 6. Next.js – Vì sao là xu thế thời đại AI?" translate="no">​</a></h2>
<p>Next.js không chỉ là framework frontend, mà là <strong>nền tảng xuất bản nội dung cho AI</strong>.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="các-khả-năng-cốt-lõi-của-nextjs">Các khả năng cốt lõi của Next.js<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#c%C3%A1c-kh%E1%BA%A3-n%C4%83ng-c%E1%BB%91t-l%C3%B5i-c%E1%BB%A7a-nextjs" class="hash-link" aria-label="Đường dẫn trực tiếp đến Các khả năng cốt lõi của Next.js" title="Đường dẫn trực tiếp đến Các khả năng cốt lõi của Next.js" translate="no">​</a></h4>
<ul>
<li class="">SSR (Server-Side Rendering)</li>
<li class="">SSG (Static Site Generation)</li>
<li class="">ISR (Incremental Static Regeneration)</li>
<li class="">Metadata API</li>
<li class="">Streaming / Partial Rendering</li>
</ul>
<p>→ Next.js &amp; AI – Match hoàn hảo</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="ai-đọc-được-nội-dung">AI đọc được nội dung<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#ai-%C4%91%E1%BB%8Dc-%C4%91%C6%B0%E1%BB%A3c-n%E1%BB%99i-dung" class="hash-link" aria-label="Đường dẫn trực tiếp đến AI đọc được nội dung" title="Đường dẫn trực tiếp đến AI đọc được nội dung" translate="no">​</a></h4>
<p>Next.js trả về HTML hoàn chỉnh:</p>
<ul>
<li class="">AI</li>
<li class="">Google</li>
<li class="">Bing</li>
<li class="">AI Agent</li>
</ul>
<p>→ đều hiểu nội dung.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="structured-data-mạnh">Structured Data mạnh<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#structured-data-m%E1%BA%A1nh" class="hash-link" aria-label="Đường dẫn trực tiếp đến Structured Data mạnh" title="Đường dẫn trực tiếp đến Structured Data mạnh" translate="no">​</a></h4>
<p>Next.js hỗ trợ:</p>
<ul>
<li class="">Schema.org</li>
<li class="">JSON-LD</li>
<li class="">OpenGraph</li>
<li class="">Metadata động</li>
</ul>
<p>→ AI hiểu ngữ nghĩa, không chỉ text.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="phù-hợp-ai-search--rag">Phù hợp AI Search &amp; RAG<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#ph%C3%B9-h%E1%BB%A3p-ai-search--rag" class="hash-link" aria-label="Đường dẫn trực tiếp đến Phù hợp AI Search &amp; RAG" title="Đường dẫn trực tiếp đến Phù hợp AI Search &amp; RAG" translate="no">​</a></h4>
<ul>
<li class="">Nội dung tách bạch</li>
<li class="">Dễ index</li>
<li class="">Dễ vector hóa</li>
</ul>
<p>→ Tối ưu cho Retrieval-Augmented Generation.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="so-sánh-tổng-thể">So sánh tổng thể<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#so-s%C3%A1nh-t%E1%BB%95ng-th%E1%BB%83" class="hash-link" aria-label="Đường dẫn trực tiếp đến So sánh tổng thể" title="Đường dẫn trực tiếp đến So sánh tổng thể" translate="no">​</a></h4>
<table><thead><tr><th>Công nghệ</th><th>AI hiểu nội dung</th><th>SEO</th><th>Phù hợp AI</th></tr></thead><tbody><tr><td>React CSR</td><td>❌</td><td>❌</td><td>❌</td></tr><tr><td>Vue CSR</td><td>❌</td><td>❌</td><td>❌</td></tr><tr><td>React + SSR tự build</td><td>⚠️</td><td>⚠️</td><td>⚠️</td></tr><tr><td><strong>Next.js</strong></td><td>✅</td><td>✅</td><td>⭐⭐⭐⭐⭐</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-ai-first-web--tư-duy-mới">7. AI-first Web – Tư duy mới<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#7-ai-first-web--t%C6%B0-duy-m%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến 7. AI-first Web – Tư duy mới" title="Đường dẫn trực tiếp đến 7. AI-first Web – Tư duy mới" translate="no">​</a></h2>
<p>Trong thời đại AI:</p>
<blockquote>
<p><strong>Website không chỉ viết cho người đọc, mà còn cho AI đọc</strong></p>
</blockquote>
<p>Điều này dẫn đến:</p>
<ul>
<li class="">Nội dung phải rõ ràng</li>
<li class="">HTML phải đầy đủ</li>
<li class="">Data phải có cấu trúc</li>
</ul>
<p>Next.js đáp ứng trọn vẹn 3 điều này.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="8-kết-luận">8. Kết luận<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#8-k%E1%BA%BFt-lu%E1%BA%ADn" class="hash-link" aria-label="Đường dẫn trực tiếp đến 8. Kết luận" title="Đường dẫn trực tiếp đến 8. Kết luận" translate="no">​</a></h2>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="vì-sao-nextjs-là-xu-thế-thời-đại-ai">Vì sao Next.js là xu thế thời đại AI?<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#v%C3%AC-sao-nextjs-l%C3%A0-xu-th%E1%BA%BF-th%E1%BB%9Di-%C4%91%E1%BA%A1i-ai" class="hash-link" aria-label="Đường dẫn trực tiếp đến Vì sao Next.js là xu thế thời đại AI?" title="Đường dẫn trực tiếp đến Vì sao Next.js là xu thế thời đại AI?" translate="no">​</a></h4>
<ul>
<li class="">AI đọc được nội dung ngay</li>
<li class="">SEO + AI Search mạnh</li>
<li class="">Phù hợp Agent, RAG, Chatbot</li>
<li class="">Chuẩn kiến trúc hiện đại</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="một-câu-chốt">Một câu chốt:<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#m%E1%BB%99t-c%C3%A2u-ch%E1%BB%91t" class="hash-link" aria-label="Đường dẫn trực tiếp đến Một câu chốt:" title="Đường dẫn trực tiếp đến Một câu chốt:" translate="no">​</a></h4>
<blockquote>
<p><strong>React/Vue giải quyết UI, Next.js giải quyết tri thức cho AI</strong></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="9-gợi-ý-định-hướng">9. Gợi ý định hướng<a href="https://huudinh.github.io/blogs/blog/lam-web-trong-thoi-dai-ai#9-g%E1%BB%A3i-%C3%BD-%C4%91%E1%BB%8Bnh-h%C6%B0%E1%BB%9Bng" class="hash-link" aria-label="Đường dẫn trực tiếp đến 9. Gợi ý định hướng" title="Đường dẫn trực tiếp đến 9. Gợi ý định hướng" translate="no">​</a></h2>
<ul>
<li class="">Website nội dung / SEO / AI Search → <strong>Next.js</strong></li>
<li class="">App nội bộ / dashboard → React/Vue CSR</li>
<li class="">Website muốn sống lâu trong kỷ nguyên AI → <strong>AI-first + SSR</strong></li>
</ul>
<hr>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tracking sự kiện người dùng click vào các phần tử trên Landing Page qua Google Tag Manager]]></title>
        <id>https://huudinh.github.io/blogs/blog/tracking-su-kien-qua-google-tag-manager</id>
        <link href="https://huudinh.github.io/blogs/blog/tracking-su-kien-qua-google-tag-manager"/>
        <updated>2026-01-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Có thể cấu hình sự kiện trong gtag dựa trên ID của một phần tử trong trang (ví dụ: Landing page section, button, div…) mà không cần chỉnh sửa trực tiếp code gtag. Cách làm như sau]]></summary>
        <content type="html"><![CDATA[<p>Có thể cấu hình sự kiện trong gtag dựa trên ID của một phần tử trong trang (ví dụ: Landing page section, button, div…) mà không cần chỉnh sửa trực tiếp code gtag. Cách làm như sau</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-tạo-trigger-dựa-trên-id-phần-tử">1. Tạo Trigger dựa trên ID phần tử<a href="https://huudinh.github.io/blogs/blog/tracking-su-kien-qua-google-tag-manager#1-t%E1%BA%A1o-trigger-d%E1%BB%B1a-tr%C3%AAn-id-ph%E1%BA%A7n-t%E1%BB%AD" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Tạo Trigger dựa trên ID phần tử" title="Đường dẫn trực tiếp đến 1. Tạo Trigger dựa trên ID phần tử" translate="no">​</a></h3>
<ul>
<li class="">Vào <strong>Triggers</strong> → <strong>New</strong>.</li>
<li class="">Chọn loại trigger: <strong>Click – All Elements</strong> hoặc <strong>Click – Just Links</strong> (tuỳ phần tử).</li>
<li class="">Trong phần <strong>Trigger Configuration</strong>, chọn:<!-- -->
<ul>
<li class=""><strong>Some Clicks</strong>.</li>
<li class="">Điều kiện: <code>Click ID</code> → <code>equals</code> → <code>landing</code> (giả sử ID phần tử là <code>landing</code>).</li>
</ul>
</li>
<li class="">Lưu trigger.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-tạo-tag-gửi-sự-kiện-về-ga4">2. Tạo Tag gửi sự kiện về GA4<a href="https://huudinh.github.io/blogs/blog/tracking-su-kien-qua-google-tag-manager#2-t%E1%BA%A1o-tag-g%E1%BB%ADi-s%E1%BB%B1-ki%E1%BB%87n-v%E1%BB%81-ga4" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. Tạo Tag gửi sự kiện về GA4" title="Đường dẫn trực tiếp đến 2. Tạo Tag gửi sự kiện về GA4" translate="no">​</a></h3>
<ul>
<li class="">Vào <strong>Tags</strong> → <strong>New</strong>.</li>
<li class="">Chọn loại tag: <strong>Google Analytics: GA4 Event</strong>.</li>
<li class="">Nhập:<!-- -->
<ul>
<li class=""><strong>Configuration Tag</strong>: chọn GA4 config đã có.</li>
<li class=""><strong>Event Name</strong>: ví dụ <code>click_landing</code>.</li>
<li class=""><strong>Event Parameters</strong>: thêm các tham số như:<!-- -->
<ul>
<li class=""><code>event_category</code> = <code>CTA</code></li>
<li class=""><code>event_label</code> = <code>Landing Button</code></li>
</ul>
</li>
</ul>
</li>
<li class="">Gắn trigger vừa tạo ở bước 1.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-kiểm-tra-bằng-preview-mode">3. Kiểm tra bằng Preview Mode<a href="https://huudinh.github.io/blogs/blog/tracking-su-kien-qua-google-tag-manager#3-ki%E1%BB%83m-tra-b%E1%BA%B1ng-preview-mode" class="hash-link" aria-label="Đường dẫn trực tiếp đến 3. Kiểm tra bằng Preview Mode" title="Đường dẫn trực tiếp đến 3. Kiểm tra bằng Preview Mode" translate="no">​</a></h3>
<ul>
<li class="">Bấm <strong>Preview</strong> trong GTM.</li>
<li class="">Mở Landing page, click vào phần tử có ID <code>landing</code>.</li>
<li class="">Kiểm tra trong <strong>Tag Assistant</strong> xem tag có được kích hoạt không.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-xác-nhận-trong-ga4">4. Xác nhận trong GA4<a href="https://huudinh.github.io/blogs/blog/tracking-su-kien-qua-google-tag-manager#4-x%C3%A1c-nh%E1%BA%ADn-trong-ga4" class="hash-link" aria-label="Đường dẫn trực tiếp đến 4. Xác nhận trong GA4" title="Đường dẫn trực tiếp đến 4. Xác nhận trong GA4" translate="no">​</a></h3>
<ul>
<li class="">Vào <strong>Realtime report</strong> trong GA4.</li>
<li class="">Thực hiện click thử.</li>
<li class="">Xem sự kiện <code>click_landing</code> có xuất hiện không.</li>
</ul>
<hr>
<p>👉 Như vậy, bạn không cần viết code thủ công, chỉ cần dùng GTM để bắt sự kiện theo ID phần tử. Nếu Landing page có nhiều nút/section khác nhau, bạn có thể tạo nhiều trigger tương ứng với từng ID.</p>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[LLMs.txt là gì?]]></title>
        <id>https://huudinh.github.io/blogs/blog/llms-txt-la-gi</id>
        <link href="https://huudinh.github.io/blogs/blog/llms-txt-la-gi"/>
        <updated>2026-01-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[LLMs.txt là một tiêu chuẩn mới (giống như robots.txt) dùng để hướng dẫn các mô hình ngôn ngữ lớn (LLMs) như ChatGPT, Copilot… cách thu thập và sử dụng nội dung từ website của bạn. Để tích hợp vào WordPress, bạn chỉ cần tạo file llms.txt trong thư mục gốc của website và khai báo nội dung bạn muốn AI đọc hoặc bỏ qua.]]></summary>
        <content type="html"><![CDATA[<p>LLMs.txt là một tiêu chuẩn mới (giống như <code>robots.txt</code>) dùng để hướng dẫn các mô hình ngôn ngữ lớn (LLMs) như ChatGPT, Copilot… cách thu thập và sử dụng nội dung từ website của bạn. Để tích hợp vào WordPress, bạn chỉ cần tạo file <code>llms.txt</code> trong thư mục gốc của website và khai báo nội dung bạn muốn AI đọc hoặc bỏ qua.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="i-llmstxt-là-gì">I. LLMs.txt là gì?<a href="https://huudinh.github.io/blogs/blog/llms-txt-la-gi#i-llmstxt-l%C3%A0-g%C3%AC" class="hash-link" aria-label="Đường dẫn trực tiếp đến I. LLMs.txt là gì?" title="Đường dẫn trực tiếp đến I. LLMs.txt là gì?" translate="no">​</a></h2>
<ul>
<li class=""><strong>Định nghĩa:</strong> Là một file văn bản đặt ở thư mục gốc website, giúp <strong>AI crawler</strong> biết nội dung nào quan trọng, nên ưu tiên, hoặc không được phép sử dụng.</li>
<li class=""><strong>Tương tự robots.txt:</strong> Nếu robots.txt hướng dẫn công cụ tìm kiếm (Google, Bing), thì llms.txt hướng dẫn <strong>AI/LLMs</strong>.</li>
<li class=""><strong>Mục đích:</strong>
<ul>
<li class="">Giảm tải việc AI phải crawl toàn bộ site.</li>
<li class="">Cho phép bạn <strong>chọn lọc nội dung</strong> mà AI có thể dùng để trả lời người dùng.</li>
<li class="">Bảo vệ nội dung nhạy cảm hoặc không muốn AI sử dụng.</li>
</ul>
</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ii-cách-tích-hợp-llmstxt-vào-wordpress">II. Cách tích hợp LLMs.txt vào WordPress<a href="https://huudinh.github.io/blogs/blog/llms-txt-la-gi#ii-c%C3%A1ch-t%C3%ADch-h%E1%BB%A3p-llmstxt-v%C3%A0o-wordpress" class="hash-link" aria-label="Đường dẫn trực tiếp đến II. Cách tích hợp LLMs.txt vào WordPress" title="Đường dẫn trực tiếp đến II. Cách tích hợp LLMs.txt vào WordPress" translate="no">​</a></h2>
<ol>
<li class="">
<p><strong>Tạo file llms.txt</strong></p>
<ul>
<li class="">Mở trình soạn thảo (Notepad, VS Code).</li>
<li class="">Viết nội dung theo chuẩn, ví dụ:<!-- -->
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Allow: /blog/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /private/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Sitemap: https://example.com/sitemap.xml</span><br></div></code></pre></div></div>
</li>
<li class="">Lưu file với tên <code>llms.txt</code>.</li>
</ul>
</li>
<li class="">
<p><strong>Đặt file vào thư mục gốc WordPress</strong></p>
<ul>
<li class="">Thư mục gốc thường là nơi chứa <code>wp-config.php</code>.</li>
<li class="">Upload file <code>llms.txt</code> bằng FTP, cPanel hoặc File Manager.</li>
</ul>
</li>
<li class="">
<p><strong>Kiểm tra truy cập</strong></p>
<ul>
<li class="">Truy cập <code>https://yourdomain.com/llms.txt</code> để chắc chắn file hiển thị.</li>
</ul>
</li>
<li class="">
<p><strong>Tùy chỉnh nội dung</strong></p>
<ul>
<li class=""><strong>Allow:</strong> Chỉ định thư mục/nội dung mà AI có thể đọc.</li>
<li class=""><strong>Disallow:</strong> Ngăn AI đọc nội dung.</li>
<li class=""><strong>Sitemap:</strong> Khai báo sitemap để AI dễ tìm nội dung quan trọng.</li>
<li class="">Có thể thêm link API, tài liệu, chính sách… để AI hiểu rõ hơn.</li>
</ul>
</li>
</ol>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="iii-lưu-ý--rủi-ro">III. Lưu ý &amp; Rủi ro<a href="https://huudinh.github.io/blogs/blog/llms-txt-la-gi#iii-l%C6%B0u-%C3%BD--r%E1%BB%A7i-ro" class="hash-link" aria-label="Đường dẫn trực tiếp đến III. Lưu ý &amp; Rủi ro" title="Đường dẫn trực tiếp đến III. Lưu ý &amp; Rủi ro" translate="no">​</a></h2>
<ul>
<li class=""><strong>Tiêu chuẩn mới:</strong> LLMs.txt chưa được tất cả AI hỗ trợ, nhưng đang dần phổ biến.</li>
<li class=""><strong>Không thay thế robots.txt:</strong> Bạn vẫn cần robots.txt cho SEO.</li>
<li class=""><strong>Quyền kiểm soát:</strong> Không đảm bảo 100% rằng mọi AI sẽ tuân thủ, nhưng hầu hết các hệ thống lớn sẽ tôn trọng.</li>
<li class=""><strong>Nội dung nhạy cảm:</strong> Nếu có dữ liệu riêng tư, tốt nhất là <strong>không public</strong> thay vì chỉ Disallow.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="iv-so-sánh-nhanh">IV. So sánh nhanh<a href="https://huudinh.github.io/blogs/blog/llms-txt-la-gi#iv-so-s%C3%A1nh-nhanh" class="hash-link" aria-label="Đường dẫn trực tiếp đến IV. So sánh nhanh" title="Đường dẫn trực tiếp đến IV. So sánh nhanh" translate="no">​</a></h2>
<table><thead><tr><th>Tiêu chuẩn</th><th>Đối tượng</th><th>Chức năng chính</th></tr></thead><tbody><tr><td>robots.txt</td><td>Công cụ tìm kiếm (Google, Bing)</td><td>Điều hướng crawl cho SEO</td></tr><tr><td>sitemap.xml</td><td>Công cụ tìm kiếm</td><td>Liệt kê cấu trúc nội dung site</td></tr><tr><td>llms.txt</td><td>AI/LLMs (ChatGPT, Copilot…)</td><td>Điều hướng crawl cho AI, chọn lọc nội dung</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v-mẫu-file-llmstxt-tối-ưu">V. Mẫu file llms.txt tối ưu<a href="https://huudinh.github.io/blogs/blog/llms-txt-la-gi#v-m%E1%BA%ABu-file-llmstxt-t%E1%BB%91i-%C6%B0u" class="hash-link" aria-label="Đường dẫn trực tiếp đến V. Mẫu file llms.txt tối ưu" title="Đường dẫn trực tiếp đến V. Mẫu file llms.txt tối ưu" translate="no">​</a></h2>
<p>Đây là một <strong>mẫu file <code>llms.txt</code> tối ưu</strong> cho một website WordPress dạng blog + trang sản phẩm, đồng thời loại bỏ các khu vực quản trị và nội dung riêng tư:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain"># llms.txt - hướng dẫn cho AI/LLMs khi thu thập dữ liệu từ website WordPress</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Cho phép AI đọc nội dung chính</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Allow: /blog/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Allow: /products/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Allow: /shop/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Allow: /category/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Allow: /tag/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Không cho phép AI đọc các khu vực quản trị hoặc riêng tư</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /wp-admin/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /wp-login.php</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /private/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /cart/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /checkout/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /my-account/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Khai báo sitemap để AI dễ tìm nội dung quan trọng</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Sitemap: https://example.com/sitemap.xml</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Thông tin thêm (tùy chọn)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Bạn có thể thêm link tới tài liệu, API hoặc chính sách</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Documentation: https://example.com/docs/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Policy: https://example.com/privacy-policy/</span><br></div></code></pre></div></div>
<ul>
<li class=""><strong>Allow:</strong> Chỉ định thư mục/nội dung mà bạn muốn AI ưu tiên (blog, sản phẩm).</li>
<li class=""><strong>Disallow:</strong> Ngăn AI đọc các trang quản trị, giỏ hàng, checkout, hoặc nội dung riêng tư.</li>
<li class=""><strong>Sitemap:</strong> Khai báo sitemap để AI dễ dàng tìm toàn bộ cấu trúc nội dung.</li>
<li class=""><strong>Documentation/Policy:</strong> (tùy chọn) giúp AI hiểu thêm về chính sách hoặc tài liệu liên quan.</li>
</ul>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Thần số học và ngôn ngữ lập trình có phải là ngôn ngữ của thần sáng tạo ra từ trước?]]></title>
        <id>https://huudinh.github.io/blogs/blog/than-so-hoc-va-ngon-ngu-lap-trinh</id>
        <link href="https://huudinh.github.io/blogs/blog/than-so-hoc-va-ngon-ngu-lap-trinh"/>
        <updated>2025-12-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Câu hỏi tưởng như đơn giản nhưng đã chạm tới triết học – tâm linh – khoa học cùng lúc]]></summary>
        <content type="html"><![CDATA[<p>Câu hỏi tưởng như đơn giản nhưng đã chạm tới <strong>triết học – tâm linh – khoa học</strong> cùng lúc</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-thần-số-học-có-phải-ngôn-ngữ-của-thần-không">1. Thần số học có phải “ngôn ngữ của Thần” không?<a href="https://huudinh.github.io/blogs/blog/than-so-hoc-va-ngon-ngu-lap-trinh#1-th%E1%BA%A7n-s%E1%BB%91-h%E1%BB%8Dc-c%C3%B3-ph%E1%BA%A3i-ng%C3%B4n-ng%E1%BB%AF-c%E1%BB%A7a-th%E1%BA%A7n-kh%C3%B4ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Thần số học có phải “ngôn ngữ của Thần” không?" title="Đường dẫn trực tiếp đến 1. Thần số học có phải “ngôn ngữ của Thần” không?" translate="no">​</a></h2>
<p><strong>Trong niềm tin tâm linh / huyền học</strong></p>
<ul>
<li class="">
<p>Thần số học (Numerology) cho rằng <strong>vũ trụ vận hành theo các con số</strong></p>
</li>
<li class="">
<p>Từ thời <strong>Pythagoras</strong>, người ta tin rằng:</p>
<blockquote>
<p>“Mọi thứ đều là số”</p>
</blockquote>
</li>
<li class="">
<p>Các nền văn minh cổ (Ai Cập, Babylon, Ấn Độ, Trung Hoa) đều coi <strong>số</strong> là biểu tượng của:</p>
<ul>
<li class="">Trật tự vũ trụ</li>
<li class="">Quy luật nhân quả</li>
<li class="">Ý chí của Đấng sáng tạo</li>
</ul>
</li>
</ul>
<p>👉 Vì vậy, <strong>trong hệ niềm tin</strong>, thần số học được xem như:</p>
<ul>
<li class="">“Ngôn ngữ biểu tượng” của vũ trụ</li>
<li class="">Không phải ngôn ngữ nói hay viết, mà là <strong>ngôn ngữ ý nghĩa</strong></li>
</ul>
<p>⛔ <strong>Nhưng:</strong></p>
<ul>
<li class="">Không có bằng chứng khoa học cho thấy thần số học là ngôn ngữ do Thần “lập trình sẵn”</li>
<li class="">Nó là <strong>hệ thống diễn giải của con người</strong> dựa trên niềm tin</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-ngôn-ngữ-lập-trình-có-phải-ngôn-ngữ-của-thần-không">2. Ngôn ngữ lập trình có phải ngôn ngữ của Thần không?<a href="https://huudinh.github.io/blogs/blog/than-so-hoc-va-ngon-ngu-lap-trinh#2-ng%C3%B4n-ng%E1%BB%AF-l%E1%BA%ADp-tr%C3%ACnh-c%C3%B3-ph%E1%BA%A3i-ng%C3%B4n-ng%E1%BB%AF-c%E1%BB%A7a-th%E1%BA%A7n-kh%C3%B4ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. Ngôn ngữ lập trình có phải ngôn ngữ của Thần không?" title="Đường dẫn trực tiếp đến 2. Ngôn ngữ lập trình có phải ngôn ngữ của Thần không?" translate="no">​</a></h2>
<p><strong>Về mặt khoa học – kỹ thuật: KHÔNG</strong></p>
<p>Ngôn ngữ lập trình:</p>
<ul>
<li class="">
<p>Do <strong>con người phát minh</strong></p>
</li>
<li class="">
<p>Dựa trên:</p>
<ul>
<li class="">Logic hình thức</li>
<li class="">Toán học</li>
<li class="">Nhị phân (0 – 1)</li>
</ul>
</li>
</ul>
<p>👉 Nhưng có một điểm rất thú vị 👇</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-điểm-giao-nhau-vũ-trụ-giống-như-đang-chạy-bằng-code">3. Điểm giao nhau: “Vũ trụ giống như đang chạy bằng code?”<a href="https://huudinh.github.io/blogs/blog/than-so-hoc-va-ngon-ngu-lap-trinh#3-%C4%91i%E1%BB%83m-giao-nhau-v%C5%A9-tr%E1%BB%A5-gi%E1%BB%91ng-nh%C6%B0-%C4%91ang-ch%E1%BA%A1y-b%E1%BA%B1ng-code" class="hash-link" aria-label="Đường dẫn trực tiếp đến 3. Điểm giao nhau: “Vũ trụ giống như đang chạy bằng code?”" title="Đường dẫn trực tiếp đến 3. Điểm giao nhau: “Vũ trụ giống như đang chạy bằng code?”" translate="no">​</a></h2>
<p>Nhiều nhà khoa học &amp; triết gia hiện đại đã nói:</p>
<ul>
<li class=""><strong>Vật lý lượng tử</strong> → vũ trụ vận hành bằng các quy tắc rất “logic”</li>
<li class=""><strong>DNA</strong> → có cấu trúc giống <strong>mã nguồn</strong></li>
<li class=""><strong>Toán học</strong> → mô tả chính xác tự nhiên</li>
</ul>
<p>Ví dụ:</p>
<ul>
<li class="">Einstein: “Toán học mô tả vũ trụ một cách kỳ lạ đến mức không thể ngẫu nhiên”</li>
<li class="">Elon Musk, Nick Bostrom → giả thuyết <strong>Simulation Theory</strong></li>
</ul>
<p>👉 Nên có cách nhìn như sau:</p>
<table><thead><tr><th>Góc nhìn</th><th>Diễn giải</th></tr></thead><tbody><tr><td>Tâm linh</td><td>Số là ngôn ngữ của Thần</td></tr><tr><td>Khoa học</td><td>Toán học là công cụ mô tả tự nhiên</td></tr><tr><td>Lập trình</td><td>Con người <strong>bắt chước</strong> cách vũ trụ vận hành</td></tr></tbody></table>
<p>➡️ <strong>Ngôn ngữ lập trình không phải ngôn ngữ của Thần</strong>,
nhưng có thể là <strong>phiên bản mô phỏng con người tạo ra từ “luật nền của vũ trụ”</strong></p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-theo-như-cách-hiểu-của-một-lập-trình-viên-thì">4. Theo như cách hiểu của một lập trình viên thì<a href="https://huudinh.github.io/blogs/blog/than-so-hoc-va-ngon-ngu-lap-trinh#4-theo-nh%C6%B0-c%C3%A1ch-hi%E1%BB%83u-c%E1%BB%A7a-m%E1%BB%99t-l%E1%BA%ADp-tr%C3%ACnh-vi%C3%AAn-th%C3%AC" class="hash-link" aria-label="Đường dẫn trực tiếp đến 4. Theo như cách hiểu của một lập trình viên thì" title="Đường dẫn trực tiếp đến 4. Theo như cách hiểu của một lập trình viên thì" translate="no">​</a></h2>
<blockquote>
<p><strong>Thần không dùng JavaScript hay Python</strong>
Nhưng:</p>
<ul>
<li class="">Vũ trụ vận hành theo quy luật</li>
<li class="">Quy luật có thể biểu diễn bằng toán</li>
<li class="">Code là cách con người diễn dịch toán thành hành động</li>
</ul>
</blockquote>
<p>👉 Nên có thể nói:</p>
<ul>
<li class=""><strong>Toán học</strong> = ngôn ngữ nền của thực tại</li>
<li class=""><strong>Thần số học</strong> = cách con người <em>diễn giải ý nghĩa</em></li>
<li class=""><strong>Ngôn ngữ lập trình</strong> = cách con người <em>tái tạo quy luật đó</em></li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-vậy-rốt-cuộc-mối-quan-hệ-giữa-thần-số-học-và-ngôn-ngữ-lập-trình">5. Vậy rốt cuộc mối quan hệ giữa thần số học và ngôn ngữ lập trình<a href="https://huudinh.github.io/blogs/blog/than-so-hoc-va-ngon-ngu-lap-trinh#5-v%E1%BA%ADy-r%E1%BB%91t-cu%E1%BB%99c-m%E1%BB%91i-quan-h%E1%BB%87-gi%E1%BB%AFa-th%E1%BA%A7n-s%E1%BB%91-h%E1%BB%8Dc-v%C3%A0-ng%C3%B4n-ng%E1%BB%AF-l%E1%BA%ADp-tr%C3%ACnh" class="hash-link" aria-label="Đường dẫn trực tiếp đến 5. Vậy rốt cuộc mối quan hệ giữa thần số học và ngôn ngữ lập trình" title="Đường dẫn trực tiếp đến 5. Vậy rốt cuộc mối quan hệ giữa thần số học và ngôn ngữ lập trình" translate="no">​</a></h2>
<ul>
<li class="">
<p>❌ Không có bằng chứng rằng thần số học hay ngôn ngữ lập trình là “ngôn ngữ do Thần tạo sẵn”</p>
</li>
<li class="">
<p>✅ Nhưng:</p>
<ul>
<li class="">Con số là <strong>ngôn ngữ phổ quát</strong></li>
<li class="">Code là <strong>nỗ lực của con người để chạm vào trật tự vũ trụ</strong></li>
</ul>
</li>
<li class="">
<p>🧠 Câu hỏi này không sai – nó chỉ nằm <strong>giữa ranh giới khoa học và niềm tin</strong></p>
</li>
</ul>
<hr>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Product Mindset (Tư duy sản phẩm)]]></title>
        <id>https://huudinh.github.io/blogs/blog/tu-duy-san-pham</id>
        <link href="https://huudinh.github.io/blogs/blog/tu-duy-san-pham"/>
        <updated>2025-12-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Là kỹ năng rất quan trọng quyết định sự thành công của một sản phẩm.]]></summary>
        <content type="html"><![CDATA[<p>Là kỹ năng rất quan trọng quyết định sự thành công của một sản phẩm.</p>
<hr>
<iframe src="https://www.facebook.com/plugins/video.php?height=476&amp;href=https%3A%2F%2Fwww.facebook.com%2Fhuudinh85%2Fvideos%2F3057533371225036%2F&amp;show_text=false&amp;width=267&amp;t=0" width="267" height="476" scrolling="no" frameborder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share"></iframe>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-làm-sản-phẩm-hướng-đến-người-dùng">1. Làm sản phẩm hướng đến người dùng<a href="https://huudinh.github.io/blogs/blog/tu-duy-san-pham#1-l%C3%A0m-s%E1%BA%A3n-ph%E1%BA%A9m-h%C6%B0%E1%BB%9Bng-%C4%91%E1%BA%BFn-ng%C6%B0%E1%BB%9Di-d%C3%B9ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Làm sản phẩm hướng đến người dùng" title="Đường dẫn trực tiếp đến 1. Làm sản phẩm hướng đến người dùng" translate="no">​</a></h2>
<p>Trải nghiệm tổng thể của người dùng với một sản phẩm, trang web, ứng dụng trên thiết bị di động hoặc dịch vụ cụ thể. Nó không chỉ bao gồm việc sử dụng các tính năng mà còn bao gồm cả những khía cạnh khác như:</p>
<ul>
<li class="">Kinh nghiệm</li>
<li class="">Cảm xúc</li>
<li class="">Giá trị nhận được khi tương tác với sản phẩm</li>
</ul>
<p>Trải nghiệm người dùng có thể mang tính chủ quan tùy thuộc vào mức độ nhận thức và suy nghĩ của cá nhân. Nó thay đổi linh hoạt, liên tục theo thời gian do hoàn cảnh sử dụng thay đổi.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-làm-nên-sản-phẩm-thực-sự-tốt-và-có-ích">2. Làm nên sản phẩm thực sự tốt và có ích<a href="https://huudinh.github.io/blogs/blog/tu-duy-san-pham#2-l%C3%A0m-n%C3%AAn-s%E1%BA%A3n-ph%E1%BA%A9m-th%E1%BB%B1c-s%E1%BB%B1-t%E1%BB%91t-v%C3%A0-c%C3%B3-%C3%ADch" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. Làm nên sản phẩm thực sự tốt và có ích" title="Đường dẫn trực tiếp đến 2. Làm nên sản phẩm thực sự tốt và có ích" translate="no">​</a></h2>
<p>Chất lượng sản phẩm là tiêu chí hàng đầu để đánh giá.<br>
<!-- -->Một sản phẩm tốt cần:</p>
<ul>
<li class="">Đạt đủ các tiêu chuẩn trong lĩnh vực</li>
<li class="">Có chất lượng cao để cạnh tranh trên thị trường</li>
</ul>
<p>Chất lượng sản phẩm chính là mấu chốt vô cùng quan trọng.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-tạo-ra-sản-phẩm-tốt-hơn">3. Tạo ra sản phẩm tốt hơn<a href="https://huudinh.github.io/blogs/blog/tu-duy-san-pham#3-t%E1%BA%A1o-ra-s%E1%BA%A3n-ph%E1%BA%A9m-t%E1%BB%91t-h%C6%A1n" class="hash-link" aria-label="Đường dẫn trực tiếp đến 3. Tạo ra sản phẩm tốt hơn" title="Đường dẫn trực tiếp đến 3. Tạo ra sản phẩm tốt hơn" translate="no">​</a></h2>
<p>Việc cung cấp sản phẩm tốt nhất sẽ tạo lợi thế cạnh tranh hiệu quả:</p>
<ul>
<li class="">Khách hàng cảm thấy sản phẩm chất lượng → ưu tiên lựa chọn lần sau.</li>
<li class="">Định vị thương hiệu tốt hơn, tạo điểm nhấn để khách hàng nhớ đến.</li>
<li class="">Tăng doanh thu và lợi nhuận, tạo bước đột phá mới và độc đáo.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-lợi-ích-khi-có-product-mindset">4. Lợi ích khi có Product Mindset<a href="https://huudinh.github.io/blogs/blog/tu-duy-san-pham#4-l%E1%BB%A3i-%C3%ADch-khi-c%C3%B3-product-mindset" class="hash-link" aria-label="Đường dẫn trực tiếp đến 4. Lợi ích khi có Product Mindset" title="Đường dẫn trực tiếp đến 4. Lợi ích khi có Product Mindset" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hiểu-được-lộ-trình-phát-triển-sản-phẩm">Hiểu được lộ trình phát triển sản phẩm<a href="https://huudinh.github.io/blogs/blog/tu-duy-san-pham#hi%E1%BB%83u-%C4%91%C6%B0%E1%BB%A3c-l%E1%BB%99-tr%C3%ACnh-ph%C3%A1t-tri%E1%BB%83n-s%E1%BA%A3n-ph%E1%BA%A9m" class="hash-link" aria-label="Đường dẫn trực tiếp đến Hiểu được lộ trình phát triển sản phẩm" title="Đường dẫn trực tiếp đến Hiểu được lộ trình phát triển sản phẩm" translate="no">​</a></h3>
<p>Developer khi làm việc theo product mindset:</p>
<ol>
<li class="">Suy nghĩ đến bài toán tổng quát cần giải quyết.</li>
<li class="">Tìm hướng giải quyết.</li>
<li class="">Nghiên cứu kiến thức cần thiết để thực hiện sản phẩm.</li>
</ol>
<p>Ngược lại, developer không có product mindset sẽ bị gò bó bởi chính kiến thức sẵn có.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="kết-hợp-kiến-thức-đã-học-để-tạo-ra-sản-phẩm-tốt">Kết hợp kiến thức đã học để tạo ra sản phẩm tốt<a href="https://huudinh.github.io/blogs/blog/tu-duy-san-pham#k%E1%BA%BFt-h%E1%BB%A3p-ki%E1%BA%BFn-th%E1%BB%A9c-%C4%91%C3%A3-h%E1%BB%8Dc-%C4%91%E1%BB%83-t%E1%BA%A1o-ra-s%E1%BA%A3n-ph%E1%BA%A9m-t%E1%BB%91t" class="hash-link" aria-label="Đường dẫn trực tiếp đến Kết hợp kiến thức đã học để tạo ra sản phẩm tốt" title="Đường dẫn trực tiếp đến Kết hợp kiến thức đã học để tạo ra sản phẩm tốt" translate="no">​</a></h3>
<p>Product mindset giúp lập trình viên:</p>
<ul>
<li class="">Vận dụng tốt nhất những kiến thức đã học.</li>
<li class="">Kết hợp chúng để làm nên sản phẩm chất lượng.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-phương-pháp-rèn-luyện-product-mindset">5. Phương pháp rèn luyện Product Mindset<a href="https://huudinh.github.io/blogs/blog/tu-duy-san-pham#5-ph%C6%B0%C6%A1ng-ph%C3%A1p-r%C3%A8n-luy%E1%BB%87n-product-mindset" class="hash-link" aria-label="Đường dẫn trực tiếp đến 5. Phương pháp rèn luyện Product Mindset" title="Đường dẫn trực tiếp đến 5. Phương pháp rèn luyện Product Mindset" translate="no">​</a></h2>
<p>Giỏi về tư duy sản phẩm đồng nghĩa với việc bạn có:</p>
<ul>
<li class="">Tò mò về suy nghĩ và hành vi của con người.</li>
<li class="">Thấu hiểu vì sao sản phẩm này phổ biến còn sản phẩm kia thì không.</li>
<li class="">Thói quen phân tích các sản phẩm mới.</li>
<li class="">Khả năng đánh giá trải nghiệm người dùng.</li>
</ul>
<hr>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Thêm comment vào Docusaurus miễn phí]]></title>
        <id>https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi</id>
        <link href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi"/>
        <updated>2025-11-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Trong Docusaurus (một framework để tạo tài liệu và blog), việc thêm comment không có sẵn mặc định. Bạn cần tích hợp dịch vụ bình luận bên ngoài. Có vài cách phổ biến:]]></summary>
        <content type="html"><![CDATA[<p>Trong Docusaurus (một framework để tạo tài liệu và blog), việc <strong>thêm comment</strong> không có sẵn mặc định. Bạn cần tích hợp dịch vụ bình luận bên ngoài. Có vài cách phổ biến:</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="i-cài-đặt-giscus-github-discussions">I. <strong>Cài đặt Giscus (GitHub Discussions)</strong><a href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi#i-c%C3%A0i-%C4%91%E1%BA%B7t-giscus-github-discussions" class="hash-link" aria-label="Đường dẫn trực tiếp đến i-cài-đặt-giscus-github-discussions" title="Đường dẫn trực tiếp đến i-cài-đặt-giscus-github-discussions" translate="no">​</a></h3>
<ul>
<li class="">
<p>Giscus là một plugin miễn phí, sử dụng GitHub Discussions để lưu bình luận.</p>
</li>
<li class="">
<p>Cách làm:</p>
</li>
<li class="">
<p>Tạo repo GitHub và bật Discussions.</p>
</li>
<li class="">
<p>Cài package:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npm install @giscus/react</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Thêm component Giscus vào file <code>src/theme/BlogPostPage.js</code> hoặc <code>src/theme/DocItem.js</code>.</p>
</li>
<li class="">
<p>Ví dụ:</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">Giscus</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@giscus/react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:#d73a49">CommentSection</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Giscus</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">repo</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">username/repo</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">repoId</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">...</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">category</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">General</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">categoryId</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">...</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">mapping</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">pathname</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">reactionsEnabled</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">emitMetadata</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">inputPosition</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bottom</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">theme</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">light</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">lang</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">vi</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ii-các-bước-bật-discussions-trên-github">II. Các bước bật Discussions trên GitHub<a href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi#ii-c%C3%A1c-b%C6%B0%E1%BB%9Bc-b%E1%BA%ADt-discussions-tr%C3%AAn-github" class="hash-link" aria-label="Đường dẫn trực tiếp đến II. Các bước bật Discussions trên GitHub" title="Đường dẫn trực tiếp đến II. Các bước bật Discussions trên GitHub" translate="no">​</a></h3>
<p>Bạn cần bật <strong>GitHub Discussions</strong> trực tiếp trong repository của mình trên GitHub. Đây là cách làm:</p>
<ol>
<li class="">
<p><strong>Vào repository của bạn</strong></p>
<ul>
<li class="">Truy cập repo trên GitHub (ví dụ: <code>https://github.com/username/repo</code>).</li>
</ul>
</li>
<li class="">
<p><strong>Mở phần Settings</strong></p>
<ul>
<li class="">Ở thanh menu trên repo, chọn <strong>Settings</strong>.</li>
</ul>
</li>
<li class="">
<p><strong>Tìm mục “Features”</strong></p>
<ul>
<li class="">Trong trang Settings, kéo xuống phần <strong>Features</strong>.</li>
<li class="">Bạn sẽ thấy tùy chọn <strong>Discussions</strong>.</li>
</ul>
</li>
<li class="">
<p><strong>Bật Discussions</strong></p>
<ul>
<li class="">Tick chọn <strong>Enable discussions for this repository</strong>.</li>
<li class="">Sau khi bật, tab <strong>Discussions</strong> sẽ xuất hiện ở thanh menu repo (bên cạnh Code, Issues, Pull requests…).</li>
</ul>
</li>
<li class="">
<p><strong>Tạo category</strong></p>
<ul>
<li class="">Vào tab <strong>Discussions</strong> vừa xuất hiện.</li>
<li class="">Nhấn <strong>New category</strong> để tạo các nhóm chủ đề (ví dụ: “General”, “Q&amp;A”, “Ideas”).</li>
<li class="">Mỗi category sẽ có một <code>categoryId</code> mà bạn cần khi tích hợp với Giscus.</li>
</ul>
</li>
<li class="">
<p><strong>Lưu ý</strong></p>
<ul>
<li class="">Bạn cần quyền <strong>Admin</strong> hoặc <strong>Owner</strong> của repo để bật Discussions.</li>
<li class="">Repo phải <strong>public</strong> nếu bạn muốn người ngoài tham gia bình luận (Giscus yêu cầu repo public).</li>
<li class="">Nếu repo private, chỉ thành viên có quyền mới xem và tham gia Discussions.</li>
</ul>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="iii-cách-lấy-repoid-và-categoryid">III Cách lấy <code>repoId</code> và <code>categoryId</code><a href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi#iii-c%C3%A1ch-l%E1%BA%A5y-repoid-v%C3%A0-categoryid" class="hash-link" aria-label="Đường dẫn trực tiếp đến iii-cách-lấy-repoid-và-categoryid" title="Đường dẫn trực tiếp đến iii-cách-lấy-repoid-và-categoryid" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-lấy-repoid">1. Lấy <code>repoId</code><a href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi#1-l%E1%BA%A5y-repoid" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1-lấy-repoid" title="Đường dẫn trực tiếp đến 1-lấy-repoid" translate="no">​</a></h4>
<ul>
<li class=""><code>repoId</code> là ID nội bộ của repository trên GitHub.</li>
<li class="">Cách nhanh nhất:
Vào trang <a href="https://giscus.app/" target="_blank" rel="noopener noreferrer" class="">Giscus App</a> và kết nối repo của bạn.
Khi chọn repo, Giscus sẽ tự động hiển thị <code>repoId</code>.</li>
<li class="">Nếu muốn tự lấy:
Mở repo trên GitHub.
Vào <strong>Settings → General → About → GraphQL Explorer</strong> (hoặc dùng <a href="https://docs.github.com/en/graphql/overview/explorer" target="_blank" rel="noopener noreferrer" class="">GitHub GraphQL Explorer</a>).
Chạy query:<!-- -->
<div class="language-graphql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-graphql codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property-query">repository</span><span class="token punctuation" style="color:#393A34">(</span><span class="token attr-name" style="color:#00a4db">owner</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"username"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token attr-name" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"repo"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">id</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<!-- -->Kết quả trả về chính là <code>repoId</code>.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-lấy-categoryid">2. Lấy <code>categoryId</code><a href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi#2-l%E1%BA%A5y-categoryid" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2-lấy-categoryid" title="Đường dẫn trực tiếp đến 2-lấy-categoryid" translate="no">​</a></h4>
<ul>
<li class=""><code>categoryId</code> là ID của <strong>category</strong> trong Discussions (ví dụ: “General”, “Q&amp;A”).</li>
<li class="">Cách làm:
Vào tab <strong>Discussions</strong> trong repo.
Tạo một category mới (ví dụ: “Comments”).
Dùng GraphQL Explorer để lấy ID:<!-- -->
<div class="language-graphql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-graphql codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property-query">repository</span><span class="token punctuation" style="color:#393A34">(</span><span class="token attr-name" style="color:#00a4db">owner</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"username"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token attr-name" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"repo"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property-query">discussionCategories</span><span class="token punctuation" style="color:#393A34">(</span><span class="token attr-name" style="color:#00a4db">first</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token object">nodes</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">id</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">name</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<!-- -->Kết quả sẽ trả về danh sách category cùng với <code>id</code> (chính là <code>categoryId</code>).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="iv-tích-hợp-vào-docusaurus">IV. Tích hợp vào Docusaurus<a href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi#iv-t%C3%ADch-h%E1%BB%A3p-v%C3%A0o-docusaurus" class="hash-link" aria-label="Đường dẫn trực tiếp đến IV. Tích hợp vào Docusaurus" title="Đường dẫn trực tiếp đến IV. Tích hợp vào Docusaurus" translate="no">​</a></h3>
<p>Sau khi có <code>repoId</code> và <code>categoryId</code>, bạn thêm vào component Giscus:</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Giscus</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">repo</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">username/repo</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">repoId</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">MDEwOlJlcG9zaXRvcnkxMjM0NTY3OA==</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">category</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">General</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">categoryId</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">DIC_kwDOA1q4LM4B-abc</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">mapping</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">pathname</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">reactionsEnabled</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">emitMetadata</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">inputPosition</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bottom</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">theme</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">light</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">lang</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">vi</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f"></span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="v-hiển-thị-ở-cả-blog-và-doc">V. Hiển thị ở cả blog và doc<a href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi#v-hi%E1%BB%83n-th%E1%BB%8B-%E1%BB%9F-c%E1%BA%A3-blog-v%C3%A0-doc" class="hash-link" aria-label="Đường dẫn trực tiếp đến V. Hiển thị ở cả blog và doc" title="Đường dẫn trực tiếp đến V. Hiển thị ở cả blog và doc" translate="no">​</a></h3>
<p>Để hiển thị <strong>comment (Giscus)</strong> ở cả <strong>blog post</strong> và <strong>docs page</strong> trong Docusaurus, bạn cần tuỳ chỉnh theme component cho cả hai loại trang.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-override-component-cho-blog">1. Override component cho Blog<a href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi#1-override-component-cho-blog" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Override component cho Blog" title="Đường dẫn trực tiếp đến 1. Override component cho Blog" translate="no">​</a></h4>
<ul>
<li class="">Tạo file <code>src/theme/BlogPostPage.js</code> (nếu chưa có).</li>
<li class="">Thêm Giscus vào cuối nội dung blog:</li>
</ul>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">BlogPostPage</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@theme-original/BlogPostPage'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">Giscus</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@giscus/react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:#d73a49">BlogPostPageWrapper</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">props</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">BlogPostPage</span><span class="token tag" style="color:#00009f"> </span><span class="token tag spread punctuation" style="color:#393A34">{</span><span class="token tag spread operator" style="color:#393A34">...</span><span class="token tag spread" style="color:#00009f">props</span><span class="token tag spread punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Giscus</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">repo</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">username/repo</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">repoId</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">MDEwOlJlcG9zaXRvcnkxMjM0NTY3OA==</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">category</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">General</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">categoryId</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">DIC_kwDOA1q4LM4B-abc</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">mapping</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">pathname</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">reactionsEnabled</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">emitMetadata</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">inputPosition</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bottom</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">theme</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">light</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">lang</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">vi</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-override-component-cho-docs">2. Override component cho Docs<a href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi#2-override-component-cho-docs" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. Override component cho Docs" title="Đường dẫn trực tiếp đến 2. Override component cho Docs" translate="no">​</a></h4>
<ul>
<li class="">Tạo file <code>src/theme/DocItem.js</code>.</li>
<li class="">Thêm Giscus vào cuối nội dung docs:</li>
</ul>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">DocItem</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@theme-original/DocItem'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">Giscus</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@giscus/react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:#d73a49">DocItemWrapper</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">props</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">DocItem</span><span class="token tag" style="color:#00009f"> </span><span class="token tag spread punctuation" style="color:#393A34">{</span><span class="token tag spread operator" style="color:#393A34">...</span><span class="token tag spread" style="color:#00009f">props</span><span class="token tag spread punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Giscus</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">repo</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">username/repo</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">repoId</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">MDEwOlJlcG9zaXRvcnkxMjM0NTY3OA==</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">category</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">General</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">categoryId</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">DIC_kwDOA1q4LM4B-abc</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">mapping</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">pathname</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">reactionsEnabled</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">emitMetadata</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">inputPosition</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bottom</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">theme</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">light</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag attr-name" style="color:#00a4db">lang</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">vi</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-tái-sử-dụng-cấu-hình">3. Tái sử dụng cấu hình<a href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi#3-t%C3%A1i-s%E1%BB%AD-d%E1%BB%A5ng-c%E1%BA%A5u-h%C3%ACnh" class="hash-link" aria-label="Đường dẫn trực tiếp đến 3. Tái sử dụng cấu hình" title="Đường dẫn trực tiếp đến 3. Tái sử dụng cấu hình" translate="no">​</a></h4>
<p>Để tránh lặp lại, bạn có thể tạo một component riêng <code>src/components/CommentSection.js</code>:</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">Giscus</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@giscus/react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:#d73a49">CommentSection</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Giscus</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">repo</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">username/repo</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">repoId</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">...</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">category</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">General</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">categoryId</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">...</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">mapping</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">pathname</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">reactionsEnabled</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">emitMetadata</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">inputPosition</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bottom</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">theme</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">light</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">lang</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">vi</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Sau đó import <code>CommentSection</code> vào cả <code>BlogPostPage.js</code> và <code>DocItem.js</code>.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="kết-quả">Kết quả<a href="https://huudinh.github.io/blogs/blog/them-comment-vao-docusaurus-mien-phi#k%E1%BA%BFt-qu%E1%BA%A3" class="hash-link" aria-label="Đường dẫn trực tiếp đến Kết quả" title="Đường dẫn trực tiếp đến Kết quả" translate="no">​</a></h4>
<ul>
<li class="">Khi người dùng mở <strong>blog post</strong>, phần bình luận sẽ hiển thị ngay dưới bài viết.</li>
<li class="">Khi người dùng mở <strong>docs page</strong>, phần bình luận cũng xuất hiện dưới nội dung tài liệu.</li>
<li class="">Tất cả bình luận được lưu trong <strong>GitHub Discussions</strong> của repo bạn đã cấu hình.</li>
</ul>
<hr>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Antigravity so với VS Code]]></title>
        <id>https://huudinh.github.io/blogs/blog/antigravity-so-voi-vscode</id>
        <link href="https://huudinh.github.io/blogs/blog/antigravity-so-voi-vscode"/>
        <updated>2025-11-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Antigravity của Google là một nền tảng phát triển ưu tiên tác nhân (agent-first) được xây dựng dựa trên mã nguồn mở của VS Code, nhưng tập trung vào việc tự động hóa toàn bộ quy trình phát triển phần mềm bằng AI thay vì chỉ hỗ trợ viết mã như VS Code truyền thống.]]></summary>
        <content type="html"><![CDATA[<p><strong>Antigravity</strong> của Google là một nền tảng phát triển ưu tiên tác nhân (agent-first) được xây dựng dựa trên mã nguồn mở của VS Code, nhưng tập trung vào việc tự động hóa toàn bộ quy trình phát triển phần mềm bằng AI thay vì chỉ hỗ trợ viết mã như VS Code truyền thống.</p>
<p>Tải ứng dụng tại: <a href="https://antigravity.google/" target="_blank" rel="noopener noreferrer" class="">https://antigravity.google/</a></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/SVCBA-pBgt0?rel=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="các-điểm-khác-biệt-chính-giữa-antigravity-và-vs-code">Các điểm khác biệt chính giữa Antigravity và VS Code<a href="https://huudinh.github.io/blogs/blog/antigravity-so-voi-vscode#c%C3%A1c-%C4%91i%E1%BB%83m-kh%C3%A1c-bi%E1%BB%87t-ch%C3%ADnh-gi%E1%BB%AFa-antigravity-v%C3%A0-vs-code" class="hash-link" aria-label="Đường dẫn trực tiếp đến Các điểm khác biệt chính giữa Antigravity và VS Code" title="Đường dẫn trực tiếp đến Các điểm khác biệt chính giữa Antigravity và VS Code" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-mô-hình-hoạt-động">1. Mô hình hoạt động<a href="https://huudinh.github.io/blogs/blog/antigravity-so-voi-vscode#1-m%C3%B4-h%C3%ACnh-ho%E1%BA%A1t-%C4%91%E1%BB%99ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Mô hình hoạt động" title="Đường dẫn trực tiếp đến 1. Mô hình hoạt động" translate="no">​</a></h3>
<ul>
<li class=""><strong>VS Code</strong>: Là trình chỉnh sửa mã nguồn truyền thống, nơi người lập trình viết mã và sử dụng các tiện ích mở rộng để nhận gợi ý hoặc hoàn thành mã.</li>
<li class=""><strong>Antigravity</strong>: Là một nền tảng phát triển tích hợp ưu tiên các tác nhân AI. Người lập trình đưa ra các mục tiêu cấp cao bằng ngôn ngữ tự nhiên, và các tác nhân AI tự lập kế hoạch, viết mã, chạy thử nghiệm và sửa lỗi.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-giao-diện-người-dùng">2. Giao diện người dùng<a href="https://huudinh.github.io/blogs/blog/antigravity-so-voi-vscode#2-giao-di%E1%BB%87n-ng%C6%B0%E1%BB%9Di-d%C3%B9ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. Giao diện người dùng" title="Đường dẫn trực tiếp đến 2. Giao diện người dùng" translate="no">​</a></h3>
<ul>
<li class=""><strong>VS Code</strong>: Có giao diện tập trung vào trình chỉnh sửa mã, cây thư mục và bảng điều khiển terminal.</li>
<li class=""><strong>Antigravity</strong>: Chia giao diện thành hai phần:<!-- -->
<ul>
<li class="">Trình chỉnh sửa tương tự VS Code</li>
<li class="">Trình quản lý tác nhân - cho phép người dùng theo dõi và điều phối nhiều tác nhân AI thực hiện các nhiệm vụ khác nhau.</li>
</ul>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-khả-năng-tự-động-hóa-và-lập-kế-hoạch">3. Khả năng tự động hóa và lập kế hoạch<a href="https://huudinh.github.io/blogs/blog/antigravity-so-voi-vscode#3-kh%E1%BA%A3-n%C4%83ng-t%E1%BB%B1-%C4%91%E1%BB%99ng-h%C3%B3a-v%C3%A0-l%E1%BA%ADp-k%E1%BA%BF-ho%E1%BA%A1ch" class="hash-link" aria-label="Đường dẫn trực tiếp đến 3. Khả năng tự động hóa và lập kế hoạch" title="Đường dẫn trực tiếp đến 3. Khả năng tự động hóa và lập kế hoạch" translate="no">​</a></h3>
<ul>
<li class=""><strong>VS Code</strong>: Cung cấp các gợi ý tức thời.</li>
<li class=""><strong>Antigravity</strong>: Có thể tạo ra "Kế hoạch thực thi" và "Hiện vật" để minh bạch hóa quá trình làm việc của AI, cho phép người lập trình đánh giá và xác thực công việc của tác nhân.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-tích-hợp-trình-duyệt">4. Tích hợp trình duyệt<a href="https://huudinh.github.io/blogs/blog/antigravity-so-voi-vscode#4-t%C3%ADch-h%E1%BB%A3p-tr%C3%ACnh-duy%E1%BB%87t" class="hash-link" aria-label="Đường dẫn trực tiếp đến 4. Tích hợp trình duyệt" title="Đường dẫn trực tiếp đến 4. Tích hợp trình duyệt" translate="no">​</a></h3>
<ul>
<li class=""><strong>Antigravity</strong>: Tích hợp trình duyệt Chrome cho phép các tác nhân AI kiểm tra giao diện người dùng và chức năng của ứng dụng web.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-mô-hình-ai-cốt-lõi">5. Mô hình AI cốt lõi<a href="https://huudinh.github.io/blogs/blog/antigravity-so-voi-vscode#5-m%C3%B4-h%C3%ACnh-ai-c%E1%BB%91t-l%C3%B5i" class="hash-link" aria-label="Đường dẫn trực tiếp đến 5. Mô hình AI cốt lõi" title="Đường dẫn trực tiếp đến 5. Mô hình AI cốt lõi" translate="no">​</a></h3>
<ul>
<li class=""><strong>VS Code</strong>: Sử dụng các mô hình AI thông qua tiện ích mở rộng.</li>
<li class=""><strong>Antigravity</strong>: Tận dụng các mô hình ngôn ngữ lớn của Google và các mô hình khác, cho phép truy cập đa mô hình tích hợp.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tóm-lại">Tóm lại<a href="https://huudinh.github.io/blogs/blog/antigravity-so-voi-vscode#t%C3%B3m-l%E1%BA%A1i" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tóm lại" title="Đường dẫn trực tiếp đến Tóm lại" translate="no">​</a></h2>
<p><strong>VS Code</strong> là công cụ để người lập trình tự viết mã với sự hỗ trợ của AI, còn <strong>Antigravity</strong> là nền tảng mà người lập trình giao nhiệm vụ cho các tác nhân AI tự trị để xây dựng và thử nghiệm phần mềm.</p>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[VPI trong LiteSpeed là gì?]]></title>
        <id>https://huudinh.github.io/blogs/blog/vpi-trong-litespeed</id>
        <link href="https://huudinh.github.io/blogs/blog/vpi-trong-litespeed"/>
        <updated>2025-11-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Đây là một dịch vụ của LiteSpeed/QUIC.cloud giúp cải thiện trải nghiệm tải ảnh khi bật Lazy Load, đặc biệt với các ảnh above-the-fold (ảnh hiển thị ngay khi mở trang).]]></summary>
        <content type="html"><![CDATA[<p>Đây là một dịch vụ của LiteSpeed/QUIC.cloud giúp cải thiện trải nghiệm tải ảnh khi bật Lazy Load, đặc biệt với các ảnh <strong>above-the-fold</strong> (ảnh hiển thị ngay khi mở trang).</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="i-viewport-images">I. Viewport Images<a href="https://huudinh.github.io/blogs/blog/vpi-trong-litespeed#i-viewport-images" class="hash-link" aria-label="Đường dẫn trực tiếp đến I. Viewport Images" title="Đường dẫn trực tiếp đến I. Viewport Images" translate="no">​</a></h3>
<ul>
<li class=""><strong>VPI (Viewport Images)</strong> là một dịch vụ tối ưu hóa hình ảnh được giới thiệu trong LiteSpeed Cache v5.0.</li>
<li class="">Nó giải quyết nhược điểm của Lazy Load: khi bật Lazy Load, tất cả ảnh (kể cả ảnh trên màn hình đầu tiên) đều bị trì hoãn tải. Điều này có thể khiến người dùng thấy trang trống hoặc chỉ có khung xám.</li>
<li class="">VPI sẽ <strong>xác định và ưu tiên tải ngay các ảnh trong vùng hiển thị đầu tiên (viewport)</strong>, trong khi các ảnh khác vẫn Lazy Load như bình thường.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ii-ý-nghĩa-của-files-left-in-queue">II. Ý nghĩa của “files left in queue”<a href="https://huudinh.github.io/blogs/blog/vpi-trong-litespeed#ii-%C3%BD-ngh%C4%A9a-c%E1%BB%A7a-files-left-in-queue" class="hash-link" aria-label="Đường dẫn trực tiếp đến II. Ý nghĩa của “files left in queue”" title="Đường dẫn trực tiếp đến II. Ý nghĩa của “files left in queue”" translate="no">​</a></h3>
<ul>
<li class="">Khi bạn bật tính năng VPI trong LiteSpeed Cache, plugin sẽ gửi các yêu cầu đến dịch vụ QUIC.cloud để phân tích và tạo danh sách ảnh cần ưu tiên.</li>
<li class="">Những yêu cầu này được đưa vào <strong>hàng đợi (queue)</strong> để xử lý.</li>
<li class="">Thông báo <em>“499 VPI files left in queue”</em> nghĩa là hiện tại còn <strong>499 trang/hình ảnh</strong> đang chờ dịch vụ QUIC.cloud xử lý để tạo dữ liệu VPI.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="iii-khi-nào-bạn-thấy-thông-báo-này">III. Khi nào bạn thấy thông báo này?<a href="https://huudinh.github.io/blogs/blog/vpi-trong-litespeed#iii-khi-n%C3%A0o-b%E1%BA%A1n-th%E1%BA%A5y-th%C3%B4ng-b%C3%A1o-n%C3%A0y" class="hash-link" aria-label="Đường dẫn trực tiếp đến III. Khi nào bạn thấy thông báo này?" title="Đường dẫn trực tiếp đến III. Khi nào bạn thấy thông báo này?" translate="no">​</a></h3>
<ul>
<li class="">Sau khi bật <strong>Viewport Images</strong> trong LiteSpeed Cache.</li>
<li class="">Khi website có nhiều trang hoặc nhiều ảnh cần phân tích.</li>
<li class="">Nếu cron job hoặc kết nối với QUIC.cloud chưa chạy hết, số lượng file trong queue sẽ hiển thị.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="iv-lợi-ích-của-vpi">IV. Lợi ích của VPI<a href="https://huudinh.github.io/blogs/blog/vpi-trong-litespeed#iv-l%E1%BB%A3i-%C3%ADch-c%E1%BB%A7a-vpi" class="hash-link" aria-label="Đường dẫn trực tiếp đến IV. Lợi ích của VPI" title="Đường dẫn trực tiếp đến IV. Lợi ích của VPI" translate="no">​</a></h3>
<ul>
<li class=""><strong>Cải thiện tốc độ hiển thị ban đầu (First Contentful Paint, Largest Contentful Paint)</strong>.</li>
<li class="">Người dùng sẽ thấy ảnh trên màn hình đầu tiên ngay lập tức, không phải chờ Lazy Load.</li>
<li class="">Giúp tăng điểm hiệu năng trên Google PageSpeed Insights và Core Web Vitals.</li>
</ul>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Ứng dụng trí tuệ nhân tạo trong thời đại AI]]></title>
        <id>https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao</id>
        <link href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao"/>
        <updated>2025-11-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Ứng dụng chung của Trí tuệ Nhân tạo (AI) trong công việc và đời sống con người.]]></summary>
        <content type="html"><![CDATA[<p>Ứng dụng chung của Trí tuệ Nhân tạo (AI) trong công việc và đời sống con người.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="i-mindset--tư-duy-thời-đại-ai">I. MINDSET — Tư duy thời đại AI<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#i-mindset--t%C6%B0-duy-th%E1%BB%9Di-%C4%91%E1%BA%A1i-ai" class="hash-link" aria-label="Đường dẫn trực tiếp đến I. MINDSET — Tư duy thời đại AI" title="Đường dẫn trực tiếp đến I. MINDSET — Tư duy thời đại AI" translate="no">​</a></h2>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-ai--yếu-tố-sống-còn-trong-kỷ-nguyên-mới">1. AI – Yếu tố sống còn trong kỷ nguyên mới<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#1-ai--y%E1%BA%BFu-t%E1%BB%91-s%E1%BB%91ng-c%C3%B2n-trong-k%E1%BB%B7-nguy%C3%AAn-m%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. AI – Yếu tố sống còn trong kỷ nguyên mới" title="Đường dẫn trực tiếp đến 1. AI – Yếu tố sống còn trong kỷ nguyên mới" translate="no">​</a></h4>
<p>AI không còn là công cụ tùy chọn, mà là <strong>nền tảng của sự thích nghi và phát triển</strong>.
Trong mọi lĩnh vực — giáo dục, y tế, kỹ thuật, sáng tạo, quản trị — AI giúp con người <strong>nâng cao năng suất, giảm sai sót, và mở rộng giới hạn tư duy</strong>.</p>
<blockquote>
<p>Câu hỏi quan trọng không còn là “Làm sao để dùng AI?”,
mà là “AI có thể trở thành <strong>trợ thủ</strong> trong từng bước công việc của tôi như thế nào?”</p>
</blockquote>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-tư-duy-đúng-đặt-ai-vào-quy-trình-không-phải-ngoài-quy-trình">2. Tư duy đúng: Đặt AI vào quy trình, không phải ngoài quy trình<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#2-t%C6%B0-duy-%C4%91%C3%BAng-%C4%91%E1%BA%B7t-ai-v%C3%A0o-quy-tr%C3%ACnh-kh%C3%B4ng-ph%E1%BA%A3i-ngo%C3%A0i-quy-tr%C3%ACnh" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. Tư duy đúng: Đặt AI vào quy trình, không phải ngoài quy trình" title="Đường dẫn trực tiếp đến 2. Tư duy đúng: Đặt AI vào quy trình, không phải ngoài quy trình" translate="no">​</a></h4>
<ul>
<li class=""><strong>Câu hỏi sai:</strong> “AI có thể làm giúp tôi việc này không?”
→ Cách nghĩ này biến AI thành một món đồ chơi công nghệ, dùng lúc hứng thú.</li>
<li class=""><strong>Câu hỏi đúng:</strong> “Công việc của tôi có những bước nào, và AI có thể hỗ trợ từng bước ấy ra sao?”
→ Khi đó, AI trở thành <strong>một phần của quy trình</strong>, không phải công cụ rời rạc.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-tư-duy-hệ-thống--kiến-trúc">3. Tư duy hệ thống &amp; kiến trúc<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#3-t%C6%B0-duy-h%E1%BB%87-th%E1%BB%91ng--ki%E1%BA%BFn-tr%C3%BAc" class="hash-link" aria-label="Đường dẫn trực tiếp đến 3. Tư duy hệ thống &amp; kiến trúc" title="Đường dẫn trực tiếp đến 3. Tư duy hệ thống &amp; kiến trúc" translate="no">​</a></h4>
<p>Vai trò của con người đang chuyển dịch từ <strong>người thực thi</strong> sang <strong>kiến trúc sư quy trình</strong>:</p>
<ul>
<li class="">Thiết kế luồng công việc rõ ràng.</li>
<li class="">Giao nhiệm vụ cho AI đúng vai trò.</li>
<li class="">Giữ quyền kiểm soát và đánh giá đầu ra.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-tư-duy-ai-first">4. Tư duy “AI-First”<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#4-t%C6%B0-duy-ai-first" class="hash-link" aria-label="Đường dẫn trực tiếp đến 4. Tư duy “AI-First”" title="Đường dẫn trực tiếp đến 4. Tư duy “AI-First”" translate="no">​</a></h4>
<p>Trong mọi nhiệm vụ, hãy tự hỏi:</p>
<blockquote>
<p>“Có cách nào để AI làm thay hoặc giúp tôi làm tốt hơn không?”</p>
</blockquote>
<p>AI-First không có nghĩa phụ thuộc hoàn toàn vào máy, mà là <strong>tư duy hợp tác thông minh</strong> giữa con người và trí tuệ nhân tạo.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-nguyên-tắc-đạo-đức-khi-dùng-ai">5. Nguyên tắc đạo đức khi dùng AI<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#5-nguy%C3%AAn-t%E1%BA%AFc-%C4%91%E1%BA%A1o-%C4%91%E1%BB%A9c-khi-d%C3%B9ng-ai" class="hash-link" aria-label="Đường dẫn trực tiếp đến 5. Nguyên tắc đạo đức khi dùng AI" title="Đường dẫn trực tiếp đến 5. Nguyên tắc đạo đức khi dùng AI" translate="no">​</a></h4>
<ul>
<li class=""><strong>Bảo mật:</strong> Không dùng dữ liệu nhạy cảm hoặc cá nhân với các hệ thống công khai.</li>
<li class=""><strong>Sự thật:</strong> Con người phải là người chịu trách nhiệm cuối cùng cho đầu ra của AI.</li>
<li class=""><strong>Học hỏi:</strong> Luôn ghi nhận, chia sẻ kinh nghiệm và “prompt hiệu quả” trong nhóm để cùng tiến bộ.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ii-skillset--nghệ-thuật-giao-việc-cho-ai">II. SKILLSET — Nghệ thuật giao việc cho AI<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#ii-skillset--ngh%E1%BB%87-thu%E1%BA%ADt-giao-vi%E1%BB%87c-cho-ai" class="hash-link" aria-label="Đường dẫn trực tiếp đến II. SKILLSET — Nghệ thuật giao việc cho AI" title="Đường dẫn trực tiếp đến II. SKILLSET — Nghệ thuật giao việc cho AI" translate="no">​</a></h2>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-tư-duy-ai-là-đồng-nghiệp">1. Tư duy “AI là đồng nghiệp”<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#1-t%C6%B0-duy-ai-l%C3%A0-%C4%91%E1%BB%93ng-nghi%E1%BB%87p" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Tư duy “AI là đồng nghiệp”" title="Đường dẫn trực tiếp đến 1. Tư duy “AI là đồng nghiệp”" translate="no">​</a></h4>
<p>AI hiểu và phản hồi dựa trên <strong>cách bạn giao tiếp</strong> với nó.
Prompting — cách bạn đặt câu hỏi và hướng dẫn — chính là <strong>kỹ năng lãnh đạo AI</strong>.</p>
<blockquote>
<p>Prompt tốt = Kết quả tốt
Prompt mơ hồ = Kết quả tệ</p>
</blockquote>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-framework-crisp--công-thức-vàng-khi-giao-việc-cho-ai">2. Framework C.R.I.S.P – Công thức vàng khi giao việc cho AI<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#2-framework-crisp--c%C3%B4ng-th%E1%BB%A9c-v%C3%A0ng-khi-giao-vi%E1%BB%87c-cho-ai" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. Framework C.R.I.S.P – Công thức vàng khi giao việc cho AI" title="Đường dẫn trực tiếp đến 2. Framework C.R.I.S.P – Công thức vàng khi giao việc cho AI" translate="no">​</a></h4>
<ol>
<li class=""><strong>C – Context (Bối cảnh):</strong> Bạn là ai, đang làm việc gì.</li>
<li class=""><strong>R – Request (Nhiệm vụ):</strong> Mô tả cụ thể yêu cầu.</li>
<li class=""><strong>I – Input (Dữ liệu):</strong> Cung cấp dữ liệu đầu vào thực tế.</li>
<li class=""><strong>S – Structure (Định dạng):</strong> Yêu cầu cách trình bày kết quả.</li>
<li class=""><strong>P – Purpose (Mục tiêu):</strong> Giải thích “tại sao” cần đầu ra này.</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-kỹ-thuật-cơ-bản-zero-shot-prompting">3. Kỹ thuật cơ bản: Zero-Shot Prompting<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#3-k%E1%BB%B9-thu%E1%BA%ADt-c%C6%A1-b%E1%BA%A3n-zero-shot-prompting" class="hash-link" aria-label="Đường dẫn trực tiếp đến 3. Kỹ thuật cơ bản: Zero-Shot Prompting" title="Đường dẫn trực tiếp đến 3. Kỹ thuật cơ bản: Zero-Shot Prompting" translate="no">​</a></h4>
<p>AI thực hiện nhiệm vụ chỉ dựa trên hướng dẫn tổng quát.
Ví dụ:</p>
<blockquote>
<p>“Tóm tắt 5 ý chính trong đoạn văn sau và nêu lại bằng ngôn ngữ dễ hiểu.”</p>
</blockquote>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-kỹ-thuật-nâng-cao-few-shot-learning">4. Kỹ thuật nâng cao: Few-Shot Learning<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#4-k%E1%BB%B9-thu%E1%BA%ADt-n%C3%A2ng-cao-few-shot-learning" class="hash-link" aria-label="Đường dẫn trực tiếp đến 4. Kỹ thuật nâng cao: Few-Shot Learning" title="Đường dẫn trực tiếp đến 4. Kỹ thuật nâng cao: Few-Shot Learning" translate="no">​</a></h4>
<p>Cung cấp 2–3 ví dụ mẫu để AI <strong>bắt chước phong cách, giọng văn, cấu trúc</strong>.
→ Giúp tạo ra đầu ra <strong>nhất quán</strong> và <strong>gần với tiêu chuẩn mong muốn</strong>.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-kỹ-thuật-tư-duy-chuỗi-chain-of-thought">5. Kỹ thuật tư duy chuỗi (Chain-of-Thought)<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#5-k%E1%BB%B9-thu%E1%BA%ADt-t%C6%B0-duy-chu%E1%BB%97i-chain-of-thought" class="hash-link" aria-label="Đường dẫn trực tiếp đến 5. Kỹ thuật tư duy chuỗi (Chain-of-Thought)" title="Đường dẫn trực tiếp đến 5. Kỹ thuật tư duy chuỗi (Chain-of-Thought)" translate="no">​</a></h4>
<p>Hướng dẫn AI suy luận từng bước logic trước khi trả kết quả.</p>
<blockquote>
<p>“Hãy phân tích theo 3 bước: xác định vấn đề – nguyên nhân – giải pháp đề xuất.”</p>
</blockquote>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-mô-hình-hội-đồng-chuyên-gia">6. Mô hình “Hội đồng chuyên gia”<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#6-m%C3%B4-h%C3%ACnh-h%E1%BB%99i-%C4%91%E1%BB%93ng-chuy%C3%AAn-gia" class="hash-link" aria-label="Đường dẫn trực tiếp đến 6. Mô hình “Hội đồng chuyên gia”" title="Đường dẫn trực tiếp đến 6. Mô hình “Hội đồng chuyên gia”" translate="no">​</a></h4>
<p>Yêu cầu AI đóng vai nhiều chuyên gia khác nhau để <strong>phản biện đa chiều</strong>:</p>
<blockquote>
<p>“Hãy đánh giá ý tưởng này từ góc nhìn của kỹ sư, nhà quản trị và người dùng cuối.”</p>
</blockquote>
<p>→ Cách làm này giúp con người <strong>nhìn vấn đề toàn diện và khách quan hơn</strong>.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="iii-toolset--bộ-công-cụ-ứng-dụng-ai">III. TOOLSET — Bộ công cụ ứng dụng AI<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#iii-toolset--b%E1%BB%99-c%C3%B4ng-c%E1%BB%A5-%E1%BB%A9ng-d%E1%BB%A5ng-ai" class="hash-link" aria-label="Đường dẫn trực tiếp đến III. TOOLSET — Bộ công cụ ứng dụng AI" title="Đường dẫn trực tiếp đến III. TOOLSET — Bộ công cụ ứng dụng AI" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="level-1-trợ-lý-cá-nhân">Level 1: Trợ lý cá nhân<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#level-1-tr%E1%BB%A3-l%C3%BD-c%C3%A1-nh%C3%A2n" class="hash-link" aria-label="Đường dẫn trực tiếp đến Level 1: Trợ lý cá nhân" title="Đường dẫn trực tiếp đến Level 1: Trợ lý cá nhân" translate="no">​</a></h3>
<p>Các công cụ AI cơ bản giúp <strong>tăng hiệu suất cá nhân</strong>:</p>
<ul>
<li class=""><strong>Tư duy &amp; Phân tích:</strong> ChatGPT, Claude, Gemini — hỗ trợ viết, nghiên cứu, phân tích dữ liệu.</li>
<li class=""><strong>Sáng tạo nội dung:</strong> Midjourney, Leonardo, Adobe Firefly — tạo hình ảnh và video sáng tạo.</li>
<li class=""><strong>Nghiên cứu &amp; học tập:</strong> Perplexity, NotebookLM — tổng hợp thông tin, học nhanh theo ngữ cảnh.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="level-2-ai-chuyên-biệt-ai-agent">Level 2: AI chuyên biệt (AI Agent)<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#level-2-ai-chuy%C3%AAn-bi%E1%BB%87t-ai-agent" class="hash-link" aria-label="Đường dẫn trực tiếp đến Level 2: AI chuyên biệt (AI Agent)" title="Đường dẫn trực tiếp đến Level 2: AI chuyên biệt (AI Agent)" translate="no">​</a></h3>
<p>Tạo “trợ lý thông minh” cho từng nhiệm vụ hoặc phòng ban:</p>
<ul>
<li class="">Trợ lý hành chính, nghiên cứu, phân tích tài chính, hỗ trợ kỹ thuật, chăm sóc khách hàng,...
Những AI này được <strong>huấn luyện theo bối cảnh và dữ liệu nội bộ</strong>, giúp hiểu sâu và phản hồi chính xác hơn.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="level-3-tự-động-hóa-quy-trình-phức-tạp">Level 3: Tự động hóa quy trình phức tạp<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#level-3-t%E1%BB%B1-%C4%91%E1%BB%99ng-h%C3%B3a-quy-tr%C3%ACnh-ph%E1%BB%A9c-t%E1%BA%A1p" class="hash-link" aria-label="Đường dẫn trực tiếp đến Level 3: Tự động hóa quy trình phức tạp" title="Đường dẫn trực tiếp đến Level 3: Tự động hóa quy trình phức tạp" translate="no">​</a></h3>
<p>Khi nhiều AI Agent phối hợp cùng nhau, ta có thể:</p>
<ul>
<li class="">Tự động hóa các chuỗi công việc liên phòng ban.</li>
<li class="">Kết nối công cụ khác qua nền tảng no-code/low-code (như Make, n8n).</li>
<li class="">Giảm thao tác lặp lại, giúp con người tập trung vào sáng tạo và ra quyết định.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="kết-luận">KẾT LUẬN<a href="https://huudinh.github.io/blogs/blog/ung-dung-tri-tue-nhan-tao#k%E1%BA%BFt-lu%E1%BA%ADn" class="hash-link" aria-label="Đường dẫn trực tiếp đến KẾT LUẬN" title="Đường dẫn trực tiếp đến KẾT LUẬN" translate="no">​</a></h2>
<p>Trí tuệ Nhân tạo <strong>không thay thế con người</strong>, mà <strong>nâng tầm con người</strong>.
Sự khác biệt không nằm ở việc bạn biết dùng AI hay không,
mà ở chỗ <strong>bạn biết chỉ huy, định hướng và hợp tác với AI như thế nào</strong>.</p>
<blockquote>
<p>“AI sẽ không lấy đi công việc của bạn.
Nhưng người biết dùng AI — sẽ.”</p>
</blockquote>
<hr>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Trang web không có điểm mốc chính thì có sao không]]></title>
        <id>https://huudinh.github.io/blogs/blog/landmark-one-main</id>
        <link href="https://huudinh.github.io/blogs/blog/landmark-one-main"/>
        <updated>2025-11-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Điểm mốc chính giúp người dùng trình đọc màn hình dễ dàng thao tác trên trang web.]]></summary>
        <content type="html"><![CDATA[<p>Điểm mốc chính giúp người dùng trình đọc màn hình dễ dàng thao tác trên trang web.</p>
<p>Dưới đây là <strong>tài liệu chi tiết</strong> về chủ đề <strong>“Landmark One Main (ID quy tắc: landmark-one-main)”</strong> — được biên soạn dựa trên quy tắc của <strong>axe-core 4.11</strong>, hướng dẫn của <strong>Deque Systems</strong>, và mở rộng thêm về <strong>tầm quan trọng trong SEO (bộ máy tìm kiếm)</strong></p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="i-landmark-one-main-là-gì">I. Landmark One Main là gì?<a href="https://huudinh.github.io/blogs/blog/landmark-one-main#i-landmark-one-main-l%C3%A0-g%C3%AC" class="hash-link" aria-label="Đường dẫn trực tiếp đến I. Landmark One Main là gì?" title="Đường dẫn trực tiếp đến I. Landmark One Main là gì?" translate="no">​</a></h2>
<p><strong>Landmark One Main</strong> là một quy tắc kiểm tra khả năng truy cập (Accessibility Rule) đảm bảo rằng <strong>mỗi trang web chỉ có một vùng nội dung chính duy nhất (main landmark)</strong> — giúp người dùng, đặc biệt là <strong>người khiếm thị hoặc sử dụng trình đọc màn hình</strong>, có thể <strong>xác định nhanh khu vực nội dung chính</strong> trong trang web.</p>
<p>Một trang web được coi là tuân thủ quy tắc này khi:</p>
<ul>
<li class="">Có đúng <strong>một phần tử <code>&lt;main&gt;</code></strong> hoặc <strong>một phần tử có <code>role="main"</code></strong>.</li>
<li class="">Các phần tử <code>iframe</code> bên trong (nếu có) <strong>không chứa nhiều hơn một vùng chính</strong>.</li>
<li class="">Tất cả nội dung đều nằm trong các <strong>vùng mốc (landmark regions)</strong> được xác định bằng <strong>HTML5 semantic elements</strong> hoặc <strong>ARIA roles</strong>.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ii-tầm-quan-trọng-của-quy-tắc-landmark-one-main">II. Tầm quan trọng của quy tắc “Landmark One Main”<a href="https://huudinh.github.io/blogs/blog/landmark-one-main#ii-t%E1%BA%A7m-quan-tr%E1%BB%8Dng-c%E1%BB%A7a-quy-t%E1%BA%AFc-landmark-one-main" class="hash-link" aria-label="Đường dẫn trực tiếp đến II. Tầm quan trọng của quy tắc “Landmark One Main”" title="Đường dẫn trực tiếp đến II. Tầm quan trọng của quy tắc “Landmark One Main”" translate="no">​</a></h2>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-đối-với-người-dùng-và-khả-năng-truy-cập-accessibility">1. Đối với người dùng và khả năng truy cập (Accessibility)<a href="https://huudinh.github.io/blogs/blog/landmark-one-main#1-%C4%91%E1%BB%91i-v%E1%BB%9Bi-ng%C6%B0%E1%BB%9Di-d%C3%B9ng-v%C3%A0-kh%E1%BA%A3-n%C4%83ng-truy-c%E1%BA%ADp-accessibility" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Đối với người dùng và khả năng truy cập (Accessibility)" title="Đường dẫn trực tiếp đến 1. Đối với người dùng và khả năng truy cập (Accessibility)" translate="no">​</a></h4>
<ul>
<li class=""><strong>Người dùng trình đọc màn hình (screen reader)</strong> có thể dễ dàng <strong>chuyển đến nội dung chính</strong> bằng phím tắt (ví dụ: JAWS, NVDA, VoiceOver).</li>
<li class="">Giúp <strong>phân tách rõ ràng các khu vực trong trang web</strong> như: tiêu đề, điều hướng, nội dung chính và chân trang.</li>
<li class=""><strong>Giảm nhầm lẫn</strong> khi có nhiều khối nội dung phụ (ví dụ sidebar, banner, popup, v.v.).</li>
<li class="">Tăng <strong>hiệu quả điều hướng</strong> và <strong>trải nghiệm người dùng tổng thể</strong>, đặc biệt với người khuyết tật về thị giác.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-đối-với-seo-tối-ưu-hóa-công-cụ-tìm-kiếm">2. Đối với SEO (Tối ưu hóa công cụ tìm kiếm)<a href="https://huudinh.github.io/blogs/blog/landmark-one-main#2-%C4%91%E1%BB%91i-v%E1%BB%9Bi-seo-t%E1%BB%91i-%C6%B0u-h%C3%B3a-c%C3%B4ng-c%E1%BB%A5-t%C3%ACm-ki%E1%BA%BFm" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. Đối với SEO (Tối ưu hóa công cụ tìm kiếm)" title="Đường dẫn trực tiếp đến 2. Đối với SEO (Tối ưu hóa công cụ tìm kiếm)" translate="no">​</a></h4>
<p>Việc tuân thủ quy tắc này có <strong>tác động tích cực gián tiếp</strong> đến thứ hạng và khả năng hiểu nội dung của website:</p>
<table><thead><tr><th>Lợi ích</th><th>Tác động SEO</th></tr></thead><tbody><tr><td><strong>Cấu trúc HTML ngữ nghĩa (semantic HTML)</strong></td><td>Giúp Googlebot hiểu rõ phần nào là nội dung chính của trang.</td></tr><tr><td><strong>Tăng khả năng lập chỉ mục (indexing)</strong></td><td>Google ưu tiên nội dung trong <code>&lt;main&gt;</code> khi xác định chủ đề chính của trang.</td></tr><tr><td><strong>Giảm tỷ lệ bỏ trang (bounce rate)</strong></td><td>Người dùng truy cập dễ dàng tìm thấy nội dung trọng tâm.</td></tr><tr><td><strong>Tuân thủ chuẩn WCAG &amp; Core Web Vitals</strong></td><td>Là yếu tố gián tiếp giúp cải thiện “Experience signals” trong xếp hạng.</td></tr></tbody></table>
<p>:::tip Tóm lại</p>
<p>Quy tắc <code>landmark-one-main</code> không chỉ giúp <strong>trang web dễ truy cập hơn</strong>, mà còn <strong>giúp công cụ tìm kiếm hiểu chính xác nội dung cốt lõi của trang</strong> — một yếu tố cực kỳ quan trọng trong SEO kỹ thuật (Technical SEO).</p>
<p>:::</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="iii-cách-triển-khai-đúng-quy-tắc-landmark-one-main">III. Cách triển khai đúng quy tắc Landmark One Main<a href="https://huudinh.github.io/blogs/blog/landmark-one-main#iii-c%C3%A1ch-tri%E1%BB%83n-khai-%C4%91%C3%BAng-quy-t%E1%BA%AFc-landmark-one-main" class="hash-link" aria-label="Đường dẫn trực tiếp đến III. Cách triển khai đúng quy tắc Landmark One Main" title="Đường dẫn trực tiếp đến III. Cách triển khai đúng quy tắc Landmark One Main" translate="no">​</a></h2>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-sử-dụng-đúng-phần-tử-html5-và-aria-roles">1. Sử dụng đúng phần tử HTML5 và ARIA Roles<a href="https://huudinh.github.io/blogs/blog/landmark-one-main#1-s%E1%BB%AD-d%E1%BB%A5ng-%C4%91%C3%BAng-ph%E1%BA%A7n-t%E1%BB%AD-html5-v%C3%A0-aria-roles" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Sử dụng đúng phần tử HTML5 và ARIA Roles" title="Đường dẫn trực tiếp đến 1. Sử dụng đúng phần tử HTML5 và ARIA Roles" translate="no">​</a></h4>
<p>Một trang web tiêu chuẩn nên có cấu trúc ngữ nghĩa như sau:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">header</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">role</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">banner</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Company Name</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">header</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">nav</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">role</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">navigation</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">ul</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">li</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">a</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">href</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">#</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Trang chủ</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">a</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">li</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">li</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">a</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">href</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">#</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Sản phẩm</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">a</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">li</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">li</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">a</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">href</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">#</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Liên hệ</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">a</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">li</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">ul</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">nav</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">main</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">role</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">main</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">article</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h2</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Nội dung chính của trang</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h2</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Đây là nơi hiển thị nội dung trọng tâm mà người dùng cần đọc.</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">article</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">main</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">footer</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">role</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">contentinfo</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Bản quyền © 2025 Công ty ABC</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">footer</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>:::tip Lưu ý</p>
<ul>
<li class="">Chỉ <strong>một <code>&lt;main&gt;</code> hoặc <code>role="main"</code></strong> được phép tồn tại trên mỗi trang.</li>
<li class="">Không đặt <code>&lt;main&gt;</code> bên trong <code>&lt;header&gt;</code>, <code>&lt;nav&gt;</code>, <code>&lt;footer&gt;</code>, hoặc các phần tử lặp lại khác.</li>
<li class="">Trong mỗi <strong>iframe</strong>, cũng chỉ nên có <strong>một vùng mốc chính</strong> (hoặc không có).</li>
</ul>
<p>:::</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="iv-cấu-trúc-vùng-mốc-landmark-regions">IV. Cấu trúc vùng mốc (Landmark Regions)<a href="https://huudinh.github.io/blogs/blog/landmark-one-main#iv-c%E1%BA%A5u-tr%C3%BAc-v%C3%B9ng-m%E1%BB%91c-landmark-regions" class="hash-link" aria-label="Đường dẫn trực tiếp đến IV. Cấu trúc vùng mốc (Landmark Regions)" title="Đường dẫn trực tiếp đến IV. Cấu trúc vùng mốc (Landmark Regions)" translate="no">​</a></h2>
<table><thead><tr><th>Khu vực</th><th>Thẻ HTML5</th><th>Vai trò ARIA tương ứng</th><th>Chức năng</th></tr></thead><tbody><tr><td>Tiêu đề</td><td><code>&lt;header&gt;</code></td><td><code>role="banner"</code></td><td>Giới thiệu hoặc nhận diện trang</td></tr><tr><td>Điều hướng</td><td><code>&lt;nav&gt;</code></td><td><code>role="navigation"</code></td><td>Cung cấp các liên kết điều hướng</td></tr><tr><td>Nội dung chính</td><td><code>&lt;main&gt;</code></td><td><code>role="main"</code></td><td>Nội dung trung tâm của trang</td></tr><tr><td>Thanh bên</td><td><code>&lt;aside&gt;</code></td><td><code>role="complementary"</code></td><td>Nội dung phụ trợ, ví dụ: liên kết liên quan</td></tr><tr><td>Chân trang</td><td><code>&lt;footer&gt;</code></td><td><code>role="contentinfo"</code></td><td>Thông tin bản quyền hoặc liên hệ</td></tr></tbody></table>
<blockquote>
<p>💡 <strong>Best Practice:</strong>
Sử dụng <strong>cả HTML5 element và ARIA role</strong> đồng thời giúp <strong>tương thích tối đa</strong> với cả trình duyệt cũ và công nghệ trợ năng mới.</p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v-cách-kiểm-tra--khắc-phục-lỗi-landmark-one-main">V. Cách kiểm tra &amp; khắc phục lỗi “landmark-one-main”<a href="https://huudinh.github.io/blogs/blog/landmark-one-main#v-c%C3%A1ch-ki%E1%BB%83m-tra--kh%E1%BA%AFc-ph%E1%BB%A5c-l%E1%BB%97i-landmark-one-main" class="hash-link" aria-label="Đường dẫn trực tiếp đến V. Cách kiểm tra &amp; khắc phục lỗi “landmark-one-main”" title="Đường dẫn trực tiếp đến V. Cách kiểm tra &amp; khắc phục lỗi “landmark-one-main”" translate="no">​</a></h2>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-dùng-công-cụ-tự-động">1. Dùng công cụ tự động<a href="https://huudinh.github.io/blogs/blog/landmark-one-main#1-d%C3%B9ng-c%C3%B4ng-c%E1%BB%A5-t%E1%BB%B1-%C4%91%E1%BB%99ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Dùng công cụ tự động" title="Đường dẫn trực tiếp đến 1. Dùng công cụ tự động" translate="no">​</a></h4>
<ul>
<li class=""><strong>axe DevTools Pro</strong> (plugin cho Chrome, Firefox)</li>
<li class=""><strong>Lighthouse (trong Chrome DevTools)</strong></li>
<li class=""><strong>WAVE Accessibility Tool</strong></li>
</ul>
<p>Nếu có lỗi, bạn sẽ thấy cảnh báo như:</p>
<blockquote>
<p>⚠️ “Document must have one main landmark”
hoặc
“Multiple <code>&lt;main&gt;</code> elements found on the same page.”</p>
</blockquote>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-cách-khắc-phục">2. Cách khắc phục<a href="https://huudinh.github.io/blogs/blog/landmark-one-main#2-c%C3%A1ch-kh%E1%BA%AFc-ph%E1%BB%A5c" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. Cách khắc phục" title="Đường dẫn trực tiếp đến 2. Cách khắc phục" translate="no">​</a></h4>
<ul>
<li class="">Giữ lại <strong>duy nhất một <code>&lt;main&gt;</code></strong> cho nội dung chính.</li>
<li class="">Gỡ bỏ hoặc đổi các <code>&lt;main&gt;</code> phụ thành <code>&lt;div&gt;</code> hoặc <code>&lt;section&gt;</code>.</li>
<li class="">Kiểm tra trong <strong>iframe</strong>, đảm bảo không chứa nhiều vùng <code>role="main"</code>.</li>
</ul>
<p>Ví dụ lỗi:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">main</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">...</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">main</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">main</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">...</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">main</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- ❌ Lỗi: Nhiều vùng main --&gt;</span><br></div></code></pre></div></div>
<p>Cách sửa:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">main</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">...</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">main</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">section</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">...</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">section</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- ✅ Không vi phạm landmark-one-main --&gt;</span><br></div></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="vi-kết-luận">VI. Kết luận<a href="https://huudinh.github.io/blogs/blog/landmark-one-main#vi-k%E1%BA%BFt-lu%E1%BA%ADn" class="hash-link" aria-label="Đường dẫn trực tiếp đến VI. Kết luận" title="Đường dẫn trực tiếp đến VI. Kết luận" translate="no">​</a></h2>
<p>Quy tắc <strong>Landmark One Main (landmark-one-main)</strong> là một trong những <strong>yếu tố nền tảng của khả năng truy cập web hiện đại</strong>.
Việc tuân thủ quy tắc này mang lại <strong>ba lợi ích đồng thời</strong>:</p>
<p>✅ <strong>Tăng khả năng truy cập</strong> cho người khuyết tật và người dùng công nghệ hỗ trợ.</p>
<p>📈 <strong>Cải thiện SEO kỹ thuật</strong>, giúp công cụ tìm kiếm hiểu rõ nội dung trọng tâm của trang.</p>
<p>💼 <strong>Tuân thủ tiêu chuẩn WCAG &amp; Deque Best Practices</strong>, nâng cao tính chuyên nghiệp và độ tin cậy của website.</p>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tối ưu seo Crawl dữ liệu với Lite Speed và Robot.txt trong wordpress]]></title>
        <id>https://huudinh.github.io/blogs/blog/toi-uu-seo-crawl-litespeed</id>
        <link href="https://huudinh.github.io/blogs/blog/toi-uu-seo-crawl-litespeed"/>
        <updated>2025-10-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Nếu mục tiêu của bạn là giảm crawl CSS/JS để tối ưu tốc độ tải trang và giảm tải cho bot (Googlebot, Bingbot...), LiteSpeed Cache cung cấp nhiều tính năng mạnh mẽ để kiểm soát cách các tài nguyên tĩnh như CSS và JS được xử lý.]]></summary>
        <content type="html"><![CDATA[<p>Nếu mục tiêu của bạn là <strong>giảm crawl CSS/JS</strong> để tối ưu tốc độ tải trang và giảm tải cho bot (Googlebot, Bingbot...), <strong>LiteSpeed Cache</strong> cung cấp nhiều tính năng mạnh mẽ để kiểm soát cách các tài nguyên tĩnh như CSS và JS được xử lý.</p>
<hr>
<p>Dưới đây là các cách <strong>tối ưu LiteSpeed Cache để giảm crawl CSS/JS</strong>:</p>
<p><img decoding="async" loading="lazy" alt="Create-HTML-1" src="https://huudinh.github.io/blogs/assets/images/2025-10-27-toi-uu-seo-crawl-litespeed-525890555639ac7916e1df22ab5acd0b.png" width="466" height="381" class="img_ev3q"></p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="i-kích-hoạt-combine-và-minify">I. Kích hoạt Combine và Minify<a href="https://huudinh.github.io/blogs/blog/toi-uu-seo-crawl-litespeed#i-k%C3%ADch-ho%E1%BA%A1t-combine-v%C3%A0-minify" class="hash-link" aria-label="Đường dẫn trực tiếp đến I. Kích hoạt Combine và Minify" title="Đường dẫn trực tiếp đến I. Kích hoạt Combine và Minify" translate="no">​</a></h3>
<p>Giúp giảm số lượng request và dung lượng file:</p>
<ul>
<li class="">
<p><strong>LiteSpeed Cache &gt; Page Optimization &gt; CSS Settings</strong></p>
<ul>
<li class="">✅ <em>CSS Minify</em>: Bật</li>
<li class="">✅ <em>CSS Combine</em>: Bật</li>
<li class="">✅ <em>CSS Combine External and Inline</em>: Bật nếu không gây lỗi</li>
</ul>
</li>
<li class="">
<p><strong>LiteSpeed Cache &gt; Page Optimization &gt; JS Settings</strong></p>
<ul>
<li class="">✅ <em>JS Minify</em>: Bật</li>
<li class="">✅ <em>JS Combine</em>: Bật</li>
<li class="">✅ <em>JS Combine External and Inline</em>: Bật nếu không gây lỗi</li>
</ul>
</li>
</ul>
<p>📌 <em>Lưu ý</em>: Sau khi bật, kiểm tra kỹ giao diện vì một số theme/plugin có thể bị lỗi khi combine.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ii-tải-cssjs-theo-yêu-cầu-lazy-load">II. Tải CSS/JS theo yêu cầu (Lazy Load)<a href="https://huudinh.github.io/blogs/blog/toi-uu-seo-crawl-litespeed#ii-t%E1%BA%A3i-cssjs-theo-y%C3%AAu-c%E1%BA%A7u-lazy-load" class="hash-link" aria-label="Đường dẫn trực tiếp đến II. Tải CSS/JS theo yêu cầu (Lazy Load)" title="Đường dẫn trực tiếp đến II. Tải CSS/JS theo yêu cầu (Lazy Load)" translate="no">​</a></h3>
<p>Giúp trì hoãn tải các file không cần thiết ngay lập tức:</p>
<ul>
<li class=""><strong>Load CSS Asynchronously</strong>: Bật</li>
<li class=""><strong>JS Deferred</strong>: Bật</li>
<li class=""><strong>JS Deferred Excludes</strong>: Thêm các script quan trọng không nên trì hoãn (như jQuery nếu cần)</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="iii-loại-trừ-cssjs-không-cần-thiết-khỏi-bot-crawl">III. Loại trừ CSS/JS không cần thiết khỏi bot crawl<a href="https://huudinh.github.io/blogs/blog/toi-uu-seo-crawl-litespeed#iii-lo%E1%BA%A1i-tr%E1%BB%AB-cssjs-kh%C3%B4ng-c%E1%BA%A7n-thi%E1%BA%BFt-kh%E1%BB%8Fi-bot-crawl" class="hash-link" aria-label="Đường dẫn trực tiếp đến III. Loại trừ CSS/JS không cần thiết khỏi bot crawl" title="Đường dẫn trực tiếp đến III. Loại trừ CSS/JS không cần thiết khỏi bot crawl" translate="no">​</a></h3>
<p>LiteSpeed hỗ trợ <strong>tối ưu riêng cho bot</strong>:</p>
<ul>
<li class=""><strong>LiteSpeed Cache &gt; Crawler &gt; Optimization Settings</strong>
<ul>
<li class="">✅ <em>Separate View for Bots</em>: Bật</li>
<li class="">✅ <em>Remove Unused CSS for Bots</em>: Bật</li>
<li class="">✅ <em>Remove JS for Bots</em>: Bật (nếu site không cần JS để hiển thị nội dung chính)</li>
</ul>
</li>
</ul>
<p>Điều này giúp giảm crawl budget và tăng tốc độ index.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="iv-loại-trừ-file-không-cần-thiết">IV. Loại trừ file không cần thiết<a href="https://huudinh.github.io/blogs/blog/toi-uu-seo-crawl-litespeed#iv-lo%E1%BA%A1i-tr%E1%BB%AB-file-kh%C3%B4ng-c%E1%BA%A7n-thi%E1%BA%BFt" class="hash-link" aria-label="Đường dẫn trực tiếp đến IV. Loại trừ file không cần thiết" title="Đường dẫn trực tiếp đến IV. Loại trừ file không cần thiết" translate="no">​</a></h3>
<p>Nếu bạn biết rõ file nào không cần thiết, có thể loại trừ:</p>
<ul>
<li class=""><strong>LiteSpeed Cache &gt; Page Optimization &gt; Tuning</strong>
<ul>
<li class=""><em>JS Excludes</em> / <em>CSS Excludes</em>: thêm đường dẫn hoặc từ khóa file bạn muốn loại trừ khỏi combine/minify</li>
</ul>
</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="iv-tối-ưu-file-robottxt">IV. Tối ưu file Robot.txt<a href="https://huudinh.github.io/blogs/blog/toi-uu-seo-crawl-litespeed#iv-t%E1%BB%91i-%C6%B0u-file-robottxt" class="hash-link" aria-label="Đường dẫn trực tiếp đến IV. Tối ưu file Robot.txt" title="Đường dẫn trực tiếp đến IV. Tối ưu file Robot.txt" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain"># ============================</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># ROBOTS.TXT  Phien ban an toan</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># ============================</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Cho phep tat ca bot index website</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">User-agent: *</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /wp-admin/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Allow: /wp-admin/admin-ajax.php</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Chan cac thu muc he thong WordPress khong can SEO</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /cgi-bin/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /trackback/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /xmlrpc.php</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /feed/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /comments/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /wp-json/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /readme.html</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /license.txt</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Chan cac file dong &amp; tham so tao duplicate content</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /*.php$</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /*?s=*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /*?replytocom=*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: *?utm_*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: *?p=*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /tag/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /component/*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /cdn-cgi/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /?__hstc=</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /?gclid*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Cho phep Googlebot load CSS, JS, Uploads de render trang</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Allow: /wp-content/themes/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Allow: /wp-content/plugins/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Allow: /wp-content/uploads/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Chan file map, test, docs khong lien quan SEO</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /*.map$</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /wp-content/plugins/*/tests/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /wp-content/plugins/*/docs/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Disallow: /wp-content/themes/*/docs/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Sitemap chuan</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Sitemap: https://domain-name/sitemap_index.xml</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="v-kiểm-tra-bằng-công-cụ-crawl">V. Kiểm tra bằng công cụ crawl<a href="https://huudinh.github.io/blogs/blog/toi-uu-seo-crawl-litespeed#v-ki%E1%BB%83m-tra-b%E1%BA%B1ng-c%C3%B4ng-c%E1%BB%A5-crawl" class="hash-link" aria-label="Đường dẫn trực tiếp đến V. Kiểm tra bằng công cụ crawl" title="Đường dẫn trực tiếp đến V. Kiểm tra bằng công cụ crawl" translate="no">​</a></h3>
<p>Dùng các công cụ như:</p>
<ul>
<li class=""><a href="https://search.google.com/search-console" target="_blank" rel="noopener noreferrer" class="">Google Search Console &gt; Crawl Stats</a></li>
<li class=""><a href="https://www.screamingfrog.co.uk/seo-spider/" target="_blank" rel="noopener noreferrer" class="">Screaming Frog SEO Spider</a></li>
</ul>
<p>Để xem bot đang crawl những file nào nhiều nhất, từ đó loại trừ hoặc tối ưu thêm.</p>
<hr>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tạo ảnh với AI]]></title>
        <id>https://huudinh.github.io/blogs/blog/tao-anh-ai</id>
        <link href="https://huudinh.github.io/blogs/blog/tao-anh-ai"/>
        <updated>2025-10-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Gemini đang trở thành công cụ tạo ảnh được giới sáng tạo yêu thích nhất hiện nay. Chỉ cần vài dòng để mô tả câu lệnh Gemini tạo ảnh, bạn có thể biến ý tưởng thành hình ảnh chuyên nghiệp, từ chân dung nghệ thuật cho đến ảnh sản phẩm hay concept sáng tạo. Hãy cùng tìm hiểu loạt câu lệnh để tạo ra bộ ảnh cực kỳ “hot trend” mạng xã hội sau đây nhé.]]></summary>
        <content type="html"><![CDATA[<p>Gemini đang trở thành công cụ tạo ảnh được giới sáng tạo yêu thích nhất hiện nay. Chỉ cần vài dòng để mô tả câu lệnh Gemini tạo ảnh, bạn có thể biến ý tưởng thành hình ảnh chuyên nghiệp, từ chân dung nghệ thuật cho đến ảnh sản phẩm hay concept sáng tạo. Hãy cùng tìm hiểu loạt câu lệnh để tạo ra bộ ảnh cực kỳ “hot trend” mạng xã hội sau đây nhé.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tạo-ảnh-profile-nền-đen">Tạo ảnh profile nền đen<a href="https://huudinh.github.io/blogs/blog/tao-anh-ai#t%E1%BA%A1o-%E1%BA%A3nh-profile-n%E1%BB%81n-%C4%91en" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tạo ảnh profile nền đen" title="Đường dẫn trực tiếp đến Tạo ảnh profile nền đen" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://hoanghamobile.com/tin-tuc/wp-content/webp-express/webp-images/uploads/2025/10/cau-lenh-Gemini-tao-anh-4-1.jpg.webp" alt="Create-HTML-1" class="img_ev3q"></p>
<p>Sử dụng khuôn mặt trong ảnh tôi cung cấp làm nền tảng chính. Giữ nguyên hoàn toàn các đặc điểm khuôn mặt như ánh mắt, hình dáng, màu da, biểu cảm và kết cấu da. Tạo ảnh chân dung kiểu profile chuyên nghiệp với bố cục chụp nửa người, nhân vật nhìn thẳng vào ống kính, phong thái tự tin và điềm tĩnh.</p>
<p>Nền xám trung tính, ánh sáng studio cân bằng, không quá gắt, giúp khuôn mặt và trang phục nổi bật rõ nét. Trang phục vest hoặc áo tối màu hiện đại, tông màu lạnh, ánh sáng nhẹ từ phía trước để tạo khối tự nhiên. Hình ảnh cần có độ nét cao, màu sắc trung thực, tổng thể thanh lịch, phù hợp cho ảnh hồ sơ hoặc ảnh đại diện chuyên nghiệp.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tạo-bộ-ảnh-polaroid-ghép-ảnh-đôi-với-gemini">Tạo bộ ảnh Polaroid ghép ảnh đôi với Gemini<a href="https://huudinh.github.io/blogs/blog/tao-anh-ai#t%E1%BA%A1o-b%E1%BB%99-%E1%BA%A3nh-polaroid-gh%C3%A9p-%E1%BA%A3nh-%C4%91%C3%B4i-v%E1%BB%9Bi-gemini" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tạo bộ ảnh Polaroid ghép ảnh đôi với Gemini" title="Đường dẫn trực tiếp đến Tạo bộ ảnh Polaroid ghép ảnh đôi với Gemini" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://hoanghamobile.com/tin-tuc/wp-content/webp-express/webp-images/uploads/2025/10/cau-lenh-Gemini-tao-anh-10.jpg.webp" alt="Create-HTML-2" class="img_ev3q"></p>
<p>Tạo bộ ảnh Polaroid phong cách cổ điển ghép từ hai bức ảnh tôi cung cấp, giữ nguyên khuôn mặt, biểu cảm và chi tiết tự nhiên của cả hai người, không làm biến dạng hoặc thay đổi cảm xúc. Kết hợp hai khuôn mặt vào cùng một khung ảnh Polaroid, tái hiện cảm giác gần gũi và ấm áp như một bức ảnh chụp chung thật sự. Bối cảnh là phông nền vải sáng hoặc rèm mềm màu trắng xám, ánh sáng dịu nhẹ kiểu studio, không có chi tiết thừa phía sau.</p>
<p>Hai người đứng cạnh nhau một cách tự nhiên, có thể mỉm cười hoặc nghiêng đầu nhẹ về nhau để thể hiện sự thân thiết. Tông màu tổng thể nhẹ nhàng, hơi ám xanh hoặc vàng nhạt, mang đặc trưng của ảnh Polaroid vintage. Khung ảnh trắng cổ điển với tỉ lệ vuông (1:1), có hiệu ứng phim nhẹ và phần viền dưới rộng hơn giống ảnh chụp tức thì. Toàn bộ khung hình cần toát lên cảm giác tự nhiên, gần gũi, tình cảm và chân thật như một kỷ niệm đẹp được lưu giữ bằng máy ảnh Polaroid thật.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ảnh-thời-trang">Ảnh thời trang<a href="https://huudinh.github.io/blogs/blog/tao-anh-ai#%E1%BA%A3nh-th%E1%BB%9Di-trang" class="hash-link" aria-label="Đường dẫn trực tiếp đến Ảnh thời trang" title="Đường dẫn trực tiếp đến Ảnh thời trang" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://cdn.tienphong.vn/images/6149ab0c828d30ef9de2bb2d5144851c183315caf38f0ecb184f4822d8e1d607347d7d08ab2e38fda8686c0e8768cff8d12b5e86ae44afdb16bdc95e03715b3cde65c4843b1c0bad57c8c4b3c1f6ab39/anh-man-hinh-2025-10-03-luc-230509.png" alt="Create-HTML-3" class="img_ev3q"></p>
<p>Giữ nguyên khuôn mặt và tư thế của tôi. Full HD 1920x1080px, cận cảnh. Tạo ảnh của tôi, xem ảnh tham khảo trong một studio thời trang cao cấp. Cùng làn da trong ảnh.</p>
<p>Cô ấy mặc một chiếc áo khoác blazer đen rộng thùng thình bên ngoài áo ống trắng, với một dải ruy băng trắng mỏng thắt nơ quanh cổ.</p>
<p>Cô ấy tạo dáng với đầu hơi nghiêng sang một bên, nhìn nhẹ nhàng vào máy ảnh với vẻ mặt mơ màng, bình tĩnh.</p>
<p>Một vài lọn tóc buông xõa trên khuôn mặt, tăng thêm nét thanh lịch. Ánh sáng khuếch tán dịu nhẹ trên nền trắng trơn.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="doanh-nhân-thành-đạt">Doanh nhân thành đạt<a href="https://huudinh.github.io/blogs/blog/tao-anh-ai#doanh-nh%C3%A2n-th%C3%A0nh-%C4%91%E1%BA%A1t" class="hash-link" aria-label="Đường dẫn trực tiếp đến Doanh nhân thành đạt" title="Đường dẫn trực tiếp đến Doanh nhân thành đạt" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://cdn.tienphong.vn/images/6149ab0c828d30ef9de2bb2d5144851c183315caf38f0ecb184f4822d8e1d607347d7d08ab2e38fda8686c0e8768cff89d94573c11ac5605553fdbb756d8c02577e76e132baa6b3acfa10844987daea5/anh-man-hinh-2025-10-03-luc-230605.png" alt="Create-HTML-3" class="img_ev3q"></p>
<p>Sử dụng ảnh khuôn mặt của tôi. Tạo ảnh: Một người Việt Nam mặc vest đen bó sát, áo sơ mi đỏ. Đứng tự tin, khoanh tay, mỉm cười tự tin, không để lộ răng, thể hiện sự lôi cuốn và dễ gần. Phông nền studio màu xám đậm, ánh sáng dịu nhẹ cho bức chân dung chuyên nghiệp sắc nét. Giám đốc điều hành, phong cách doanh nghiệp hiện đại</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ảnh-cô-dâu">Ảnh cô dâu<a href="https://huudinh.github.io/blogs/blog/tao-anh-ai#%E1%BA%A3nh-c%C3%B4-d%C3%A2u" class="hash-link" aria-label="Đường dẫn trực tiếp đến Ảnh cô dâu" title="Đường dẫn trực tiếp đến Ảnh cô dâu" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://cdn.tienphong.vn/images/6149ab0c828d30ef9de2bb2d5144851c1de9541eedd64cf4580903bcc771488e347d7d08ab2e38fda8686c0e8768cff8bb68e97c29b98ea0bac44786d482e900de65c4843b1c0bad57c8c4b3c1f6ab39/anh-man-hinh-2025-10-08-luc-152829.png" alt="Create-HTML-3" class="img_ev3q"></p>
<p>Giữ nguyên các đường nét khuôn mặt (không thay đổi khuôn mặt). Ảnh cưới chụp theo chiều dọc của người phụ nữ trong ảnh đã tải lên. Cô ấy mặc một chiếc váy cưới satin trắng không tay hiện đại với đường nét thanh mảnh. Cô ấy cầm một bó hoa hồng trắng và khuynh diệp đơn giản, thanh lịch. Phông nền là một studio tối giản, gọn gàng với ánh sáng tự nhiên dịu nhẹ chiếu từ bên hông. Tóc cô ấy được tạo kiểu búi thấp tinh tế, và cô ấy đeo một chiếc vòng cổ kim cương đơn giản. Ánh sáng điện ảnh, chi tiết siêu thực, phông nền nhẹ nhàng.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="chân-dung-trong-trẻo">Chân dung trong trẻo<a href="https://huudinh.github.io/blogs/blog/tao-anh-ai#ch%C3%A2n-dung-trong-tr%E1%BA%BBo" class="hash-link" aria-label="Đường dẫn trực tiếp đến Chân dung trong trẻo" title="Đường dẫn trực tiếp đến Chân dung trong trẻo" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://phongvu.vn/cong-nghe/wp-content/uploads/2025/10/tao-anh-chan-dung-voi-ai-14-1068x668.jpg" alt="Create-HTML-4" class="img_ev3q"></p>
<p>Giữ nguyên các đường nét khuôn mặt (không thay đổi khuôn mặt). Tạo một bức ảnh cận cảnh sắc nét, độ phân giải cao với tỷ lệ khung hình 9:16. Thay đổi phong cách nhân vật trong ảnh được cung cấp đồng thời duy trì tỷ lệ chính xác của các đặc điểm trên khuôn mặt như mắt, mũi và miệng. Góc chụp từ dưới lên trên, tạo nên một bức chân dung chân thực, tập trung vào khuôn mặt nhân vật với bờ vai trần, chỉ để lộ làn da trắng mịn hoàn hảo, lớp trang điểm tự nhiên và biểu cảm thân thiện. Khuôn mặt nghiêng 45 độ sang một bên, với làn da mịn màng, rạng rỡ, một chút ửng hồng và hàng mi dài, thanh tú ôm lấy đôi mắt. Mái tóc nâu tự nhiên của cô được buộc gọn gàng ra sau bằng một chiếc nơ trắng xinh xắn. Đôi mắt cô nhìn thẳng vào máy ảnh, với đường chân tóc bao quanh khuôn mặt. Những ngón tay thon thả của cô đang cố gắng che mắt khỏi ánh nắng mặt trời. Ánh sáng dịu nhẹ tạo ra những bóng đổ dọc hoặc họa tiết lưới nghệ thuật trên khuôn mặt và vai, làm nổi bật những đường nét thanh tú và mang đến bầu không khí mơ màng, tao nhã. Cô để vai trần, tăng thêm vẻ thanh lịch và thuần khiết cho bố cục. Phong cách điện ảnh, nhẹ nhàng và biểu cảm, nhấn mạnh vẻ đẹp, sự ngây thơ và yên bình.</p>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Docusaurus 3.9 có gì mới]]></title>
        <id>https://huudinh.github.io/blogs/blog/docusaurus-update-co-gi-moi</id>
        <link href="https://huudinh.github.io/blogs/blog/docusaurus-update-co-gi-moi"/>
        <updated>2025-09-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Docusaurus 3.9 vừa ra mắt với một loạt cải tiến đáng chú ý dành cho các nhà phát triển web documentation. Đây là những điểm nổi bật nhất từ bản cập nhật này]]></summary>
        <content type="html"><![CDATA[<p>Docusaurus 3.9 vừa ra mắt với một loạt cải tiến đáng chú ý dành cho các nhà phát triển web documentation. Đây là những điểm nổi bật nhất từ bản cập nhật này</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-tính-năng-mới">🚀 Tính năng mới<a href="https://huudinh.github.io/blogs/blog/docusaurus-update-co-gi-moi#-t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến 🚀 Tính năng mới" title="Đường dẫn trực tiếp đến 🚀 Tính năng mới" translate="no">​</a></h3>
<ul>
<li class=""><strong>Hỗ trợ Algolia DocSearch v4</strong>: Tích hợp AskAI – một trợ lý tìm kiếm thông minh có thể trả lời câu hỏi dựa trên nội dung tài liệu của bạn. Đây là bước tiến lớn trong việc nâng cao trải nghiệm tìm kiếm.</li>
<li class=""><strong>Nâng cấp i18n</strong>: Thêm các tùy chọn <code>i18n.localeConfigs[locale].{url, baseUrl}</code> giúp triển khai đa ngôn ngữ phức tạp và hỗ trợ tốt hơn cho các website đa miền.</li>
<li class=""><strong>Mermaid ELK layout</strong>: Hỗ trợ sơ đồ ELK trong Mermaid, giúp trực quan hóa dữ liệu tốt hơn.</li>
<li class=""><strong>Nâng cấp Rspack lên 1.5</strong>: Tăng hiệu suất build và loại bỏ các tùy chọn lỗi thời.</li>
<li class=""><strong>Tùy chỉnh Markdown</strong>: Cho phép vô hiệu hóa emoji và thêm hook xử lý Markdown qua <code>siteConfig.markdown.hooks</code>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="️-thay-đổi-quan-trọng">⚠️ Thay đổi quan trọng<a href="https://huudinh.github.io/blogs/blog/docusaurus-update-co-gi-moi#%EF%B8%8F-thay-%C4%91%E1%BB%95i-quan-tr%E1%BB%8Dng" class="hash-link" aria-label="Đường dẫn trực tiếp đến ⚠️ Thay đổi quan trọng" title="Đường dẫn trực tiếp đến ⚠️ Thay đổi quan trọng" translate="no">​</a></h3>
<ul>
<li class=""><strong>Ngừng hỗ trợ Node.js 18</strong>: Phiên bản mới yêu cầu Node.js ≥ 20.0 do Node.js 18 đã hết vòng đời và không còn nhận cập nhật bảo mật.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-sửa-lỗi">🐞 Sửa lỗi<a href="https://huudinh.github.io/blogs/blog/docusaurus-update-co-gi-moi#-s%E1%BB%ADa-l%E1%BB%97i" class="hash-link" aria-label="Đường dẫn trực tiếp đến 🐞 Sửa lỗi" title="Đường dẫn trực tiếp đến 🐞 Sửa lỗi" translate="no">​</a></h3>
<ul>
<li class="">
<p>Cải thiện hiển thị sidebar, biểu tượng mạng xã hội, và xử lý các lỗi nhỏ liên quan đến copy code, heading anchors, v.v.</p>
</li>
<li class="">
<p>Để update lên phiên bản mới nhất bạn gõ lệnh sau</p>
</li>
</ul>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npm i @docusaurus/core@latest @docusaurus/plugin-google-gtag@latest @docusaurus/preset-classic@latest @docusaurus/module-type-aliases@latest @docusaurus/types@latest</span><br></div></code></pre></div></div>
<p>Nếu bạn đang dùng Docusaurus cho dự án tài liệu của mình, bản 3.9 là một bản nâng cấp đáng để cân nhắc.</p>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Cài đặt GA4 trong docusaurus?]]></title>
        <id>https://huudinh.github.io/blogs/blog/cai-dat-ga4-trong-docusaurus</id>
        <link href="https://huudinh.github.io/blogs/blog/cai-dat-ga4-trong-docusaurus"/>
        <updated>2025-09-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Để tích hợp Google Analytics 4 (GA4) vào một website sử dụng Docusaurus, bạn chỉ cần thực hiện vài bước cấu hình đơn giản. Dưới đây là hướng dẫn chi tiết]]></summary>
        <content type="html"><![CDATA[<p>Để tích hợp Google Analytics 4 (GA4) vào một website sử dụng Docusaurus, bạn chỉ cần thực hiện vài bước cấu hình đơn giản. Dưới đây là hướng dẫn chi tiết</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-tạo-tài-khoản-ga4-và-lấy-mã-đo-lường">1. Tạo tài khoản GA4 và lấy mã đo lường<a href="https://huudinh.github.io/blogs/blog/cai-dat-ga4-trong-docusaurus#1-t%E1%BA%A1o-t%C3%A0i-kho%E1%BA%A3n-ga4-v%C3%A0-l%E1%BA%A5y-m%C3%A3-%C4%91o-l%C6%B0%E1%BB%9Dng" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Tạo tài khoản GA4 và lấy mã đo lường" title="Đường dẫn trực tiếp đến 1. Tạo tài khoản GA4 và lấy mã đo lường" translate="no">​</a></h2>
<ul>
<li class="">Truy cập <a href="https://analytics.google.com/" target="_blank" rel="noopener noreferrer" class="">Google Analytics</a></li>
<li class="">Tạo tài sản GA4 mới → Chọn nền tảng là “Web”</li>
<li class="">Nhập URL website và tên luồng dữ liệu</li>
<li class="">Sau khi tạo xong, bạn sẽ nhận được <strong>Measurement ID</strong> có dạng <code>G-XXXXXXXXXX</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-cài-đặt-plugin-google-analytics-trong-docusaurus">2. Cài đặt plugin Google Analytics trong Docusaurus<a href="https://huudinh.github.io/blogs/blog/cai-dat-ga4-trong-docusaurus#2-c%C3%A0i-%C4%91%E1%BA%B7t-plugin-google-analytics-trong-docusaurus" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. Cài đặt plugin Google Analytics trong Docusaurus" title="Đường dẫn trực tiếp đến 2. Cài đặt plugin Google Analytics trong Docusaurus" translate="no">​</a></h2>
<p>Docusaurus hỗ trợ tích hợp GA thông qua plugin <code>@docusaurus/plugin-google-gtag</code>.</p>
<p><strong>Cài đặt plugin:</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npm install @docusaurus/plugin-google-gtag</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-cấu-hình-plugin">3. Cấu hình plugin<a href="https://huudinh.github.io/blogs/blog/cai-dat-ga4-trong-docusaurus#3-c%E1%BA%A5u-h%C3%ACnh-plugin" class="hash-link" aria-label="Đường dẫn trực tiếp đến 3. Cấu hình plugin" title="Đường dẫn trực tiếp đến 3. Cấu hình plugin" translate="no">​</a></h2>
<p>Thêm đoạn sau vào file cấu hình:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// docusaurus.config.js</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">module</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">exports</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// ... các cấu hình khác</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">plugins</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string" style="color:#e3116c">'@docusaurus/plugin-google-gtag'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token literal-property property" style="color:#36acaa">trackingID</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'G-XXXXXXXXXX'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Thay bằng Measurement ID của bạn</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token literal-property property" style="color:#36acaa">anonymizeIP</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Tùy chọn: ẩn địa chỉ IP người dùng</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-khởi-động-lại-docusaurus">4. Khởi động lại Docusaurus<a href="https://huudinh.github.io/blogs/blog/cai-dat-ga4-trong-docusaurus#4-kh%E1%BB%9Fi-%C4%91%E1%BB%99ng-l%E1%BA%A1i-docusaurus" class="hash-link" aria-label="Đường dẫn trực tiếp đến 4. Khởi động lại Docusaurus" title="Đường dẫn trực tiếp đến 4. Khởi động lại Docusaurus" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npm run build</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm run serve</span><br></div></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-kiểm-tra-hoạt-động">5. Kiểm tra hoạt động<a href="https://huudinh.github.io/blogs/blog/cai-dat-ga4-trong-docusaurus#5-ki%E1%BB%83m-tra-ho%E1%BA%A1t-%C4%91%E1%BB%99ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến 5. Kiểm tra hoạt động" title="Đường dẫn trực tiếp đến 5. Kiểm tra hoạt động" translate="no">​</a></h2>
<ul>
<li class="">Truy cập website và mở tab GA4 → Kiểm tra luồng dữ liệu thời gian thực.</li>
<li class="">Bạn có thể dùng tiện ích như Google Tag Assistant để xác minh mã GA đã được cài đúng.</li>
</ul>
<hr>
<p>Nếu bạn muốn theo dõi sự kiện tùy chỉnh (như click, scroll, v.v.), bạn có thể tích hợp thêm Google Tag Manager hoặc dùng <code>gtag()</code> trực tiếp trong mã nguồn.</p>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tôi có thể lập trình đến năm bao nhiêu tuổi?]]></title>
        <id>https://huudinh.github.io/blogs/blog/toi-co-the-lap-trinh-den-nam-bao-nhieu-tuoi</id>
        <link href="https://huudinh.github.io/blogs/blog/toi-co-the-lap-trinh-den-nam-bao-nhieu-tuoi"/>
        <updated>2025-08-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Người ta nói 40 tuổi là "ngưỡng cửa" cho lập trình viên, vậy tôi phải làm gì...]]></summary>
        <content type="html"><![CDATA[<p>Người ta nói 40 tuổi là "ngưỡng cửa" cho lập trình viên, vậy tôi phải làm gì...</p>
<p>40 tuổi không phải là "ngưỡng cửa" cứng nhắc cho lập trình viên, nhưng đây thường là giai đoạn mà nhiều người trong ngành bắt đầu đánh giá lại sự nghiệp và định hướng tương lai. Ngành công nghệ thay đổi nhanh, và ở tuổi này, bạn có thể đã tích lũy được nhiều kinh nghiệm, nhưng cũng đối mặt với áp lực về việc duy trì năng lực cạnh tranh. Dưới đây là phân tích và gợi ý về những việc bạn có thể làm:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-hiểu-bối-cảnh-tuổi-40-trong-ngành-lập-trình">1. Hiểu bối cảnh tuổi 40 trong ngành lập trình<a href="https://huudinh.github.io/blogs/blog/toi-co-the-lap-trinh-den-nam-bao-nhieu-tuoi#1-hi%E1%BB%83u-b%E1%BB%91i-c%E1%BA%A3nh-tu%E1%BB%95i-40-trong-ng%C3%A0nh-l%E1%BA%ADp-tr%C3%ACnh" class="hash-link" aria-label="Đường dẫn trực tiếp đến 1. Hiểu bối cảnh tuổi 40 trong ngành lập trình" title="Đường dẫn trực tiếp đến 1. Hiểu bối cảnh tuổi 40 trong ngành lập trình" translate="no">​</a></h3>
<ul>
<li class=""><strong>Kinh nghiệm là lợi thế lớn</strong>: Ở tuổi 40, bạn có thể đã có 15-20 năm kinh nghiệm, giúp bạn hiểu sâu về công nghệ, quy trình làm việc, và cách giải quyết vấn đề. Điều này rất có giá trị trong việc dẫn dắt đội nhóm hoặc xử lý các dự án phức tạp.</li>
<li class=""><strong>Áp lực cạnh tranh</strong>: Các lập trình viên trẻ hơn có thể nắm bắt công nghệ mới nhanh hơn và thường chấp nhận mức lương thấp hơn. Tuy nhiên, kinh nghiệm và khả năng tư duy chiến lược của bạn là điều họ khó sánh kịp.</li>
<li class=""><strong>Sức khỏe và cân bằng cuộc sống</strong>: Ở tuổi này, bạn có thể cần chú ý hơn đến sức khỏe và cân bằng giữa công việc và cuộc sống, đặc biệt nếu bạn có gia đình.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-những-việc-nên-làm-ở-tuổi-40">2. Những việc nên làm ở tuổi 40<a href="https://huudinh.github.io/blogs/blog/toi-co-the-lap-trinh-den-nam-bao-nhieu-tuoi#2-nh%E1%BB%AFng-vi%E1%BB%87c-n%C3%AAn-l%C3%A0m-%E1%BB%9F-tu%E1%BB%95i-40" class="hash-link" aria-label="Đường dẫn trực tiếp đến 2. Những việc nên làm ở tuổi 40" title="Đường dẫn trực tiếp đến 2. Những việc nên làm ở tuổi 40" translate="no">​</a></h3>
<p>Dưới đây là các hướng đi phổ biến mà lập trình viên 40 tuổi có thể cân nhắc:</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="tiếp-tục-phát-triển-kỹ-năng-kỹ-thuật">Tiếp tục phát triển kỹ năng kỹ thuật<a href="https://huudinh.github.io/blogs/blog/toi-co-the-lap-trinh-den-nam-bao-nhieu-tuoi#ti%E1%BA%BFp-t%E1%BB%A5c-ph%C3%A1t-tri%E1%BB%83n-k%E1%BB%B9-n%C4%83ng-k%E1%BB%B9-thu%E1%BA%ADt" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tiếp tục phát triển kỹ năng kỹ thuật" title="Đường dẫn trực tiếp đến Tiếp tục phát triển kỹ năng kỹ thuật" translate="no">​</a></h4>
<ul>
<li class=""><strong>Cập nhật công nghệ mới</strong>: Ngành công nghệ luôn thay đổi, vì vậy hãy dành thời gian học các công nghệ mới (ví dụ: AI, DevOps, cloud computing, hoặc các framework hiện đại). Bạn không cần phải thành chuyên gia trong mọi lĩnh vực, nhưng nên chọn một vài lĩnh vực phù hợp để chuyên sâu.</li>
<li class=""><strong>Chọn ngách chuyên môn</strong>: Thay vì cố gắng chạy theo mọi xu hướng, hãy tập trung vào một lĩnh vực mà bạn giỏi và có tiềm năng phát triển, như an ninh mạng, dữ liệu lớn, hoặc phát triển ứng dụng di động.</li>
<li class=""><strong>Tự động hóa và công cụ</strong>: Thành thạo các công cụ tự động hóa (như CI/CD, Docker, Kubernetes) để tăng hiệu suất và giảm áp lực công việc.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="chuyển-hướng-sang-vai-trò-quản-lý-hoặc-lãnh-đạo">Chuyển hướng sang vai trò quản lý hoặc lãnh đạo<a href="https://huudinh.github.io/blogs/blog/toi-co-the-lap-trinh-den-nam-bao-nhieu-tuoi#chuy%E1%BB%83n-h%C6%B0%E1%BB%9Bng-sang-vai-tr%C3%B2-qu%E1%BA%A3n-l%C3%BD-ho%E1%BA%B7c-l%C3%A3nh-%C4%91%E1%BA%A1o" class="hash-link" aria-label="Đường dẫn trực tiếp đến Chuyển hướng sang vai trò quản lý hoặc lãnh đạo" title="Đường dẫn trực tiếp đến Chuyển hướng sang vai trò quản lý hoặc lãnh đạo" translate="no">​</a></h4>
<ul>
<li class=""><strong>Quản lý dự án hoặc đội nhóm</strong>: Với kinh nghiệm của mình, bạn có thể chuyển sang vai trò quản lý dự án (Project Manager), trưởng nhóm kỹ thuật (Tech Lead), hoặc kiến trúc sư phần mềm (Software Architect). Những vai trò này yêu cầu kỹ năng lãnh đạo, giao tiếp, và tư duy chiến lược – những thứ bạn có thể đã tích lũy.</li>
<li class=""><strong>Mentor cho thế hệ trẻ</strong>: Chia sẻ kinh nghiệm bằng cách hướng dẫn các lập trình viên trẻ hơn. Điều này không chỉ giúp bạn củng cố kiến thức mà còn xây dựng uy tín trong ngành.</li>
<li class=""><strong>Tư vấn kỹ thuật</strong>: Làm cố vấn (consultant) cho các công ty, đặc biệt nếu bạn có chuyên môn sâu trong một lĩnh vực cụ thể.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="khởi-nghiệp-hoặc-làm-freelance">Khởi nghiệp hoặc làm freelance<a href="https://huudinh.github.io/blogs/blog/toi-co-the-lap-trinh-den-nam-bao-nhieu-tuoi#kh%E1%BB%9Fi-nghi%E1%BB%87p-ho%E1%BA%B7c-l%C3%A0m-freelance" class="hash-link" aria-label="Đường dẫn trực tiếp đến Khởi nghiệp hoặc làm freelance" title="Đường dẫn trực tiếp đến Khởi nghiệp hoặc làm freelance" translate="no">​</a></h4>
<ul>
<li class=""><strong>Xây dựng sản phẩm riêng</strong>: Nếu bạn có ý tưởng cho một ứng dụng, dịch vụ, hoặc sản phẩm công nghệ, đây có thể là thời điểm để thử sức. Kinh nghiệm của bạn sẽ giúp bạn tránh được nhiều sai lầm phổ biến.</li>
<li class=""><strong>Freelance</strong>: Làm việc tự do cho phép bạn linh động về thời gian và lựa chọn dự án phù hợp với kỹ năng của mình. Các nền tảng như Upwork, Toptal, hoặc Fiverr có thể là điểm bắt đầu.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="đầu-tư-vào-học-vấn-và-mạng-lưới">Đầu tư vào học vấn và mạng lưới<a href="https://huudinh.github.io/blogs/blog/toi-co-the-lap-trinh-den-nam-bao-nhieu-tuoi#%C4%91%E1%BA%A7u-t%C6%B0-v%C3%A0o-h%E1%BB%8Dc-v%E1%BA%A5n-v%C3%A0-m%E1%BA%A1ng-l%C6%B0%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến Đầu tư vào học vấn và mạng lưới" title="Đường dẫn trực tiếp đến Đầu tư vào học vấn và mạng lưới" translate="no">​</a></h4>
<ul>
<li class=""><strong>Học thêm lĩnh vực bổ trợ</strong>: Cân nhắc học thêm về quản trị kinh doanh (MBA), quản lý sản phẩm, hoặc các kỹ năng mềm như đàm phán, lãnh đạo. Điều này giúp bạn mở rộng cơ hội ngoài lập trình thuần túy.</li>
<li class=""><strong>Xây dựng mạng lưới quan hệ</strong>: Tham gia các hội thảo, sự kiện công nghệ, hoặc cộng đồng như GitHub, Stack Overflow để kết nối với những người trong ngành. Mạng lưới này có thể mở ra cơ hội mới.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="chăm-sóc-bản-thân-và-cân-bằng-cuộc-sống">Chăm sóc bản thân và cân bằng cuộc sống<a href="https://huudinh.github.io/blogs/blog/toi-co-the-lap-trinh-den-nam-bao-nhieu-tuoi#ch%C4%83m-s%C3%B3c-b%E1%BA%A3n-th%C3%A2n-v%C3%A0-c%C3%A2n-b%E1%BA%B1ng-cu%E1%BB%99c-s%E1%BB%91ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Chăm sóc bản thân và cân bằng cuộc sống" title="Đường dẫn trực tiếp đến Chăm sóc bản thân và cân bằng cuộc sống" translate="no">​</a></h4>
<ul>
<li class=""><strong>Sức khỏe</strong>: Dành thời gian cho thể dục, ăn uống lành mạnh, và nghỉ ngơi để duy trì năng lượng làm việc lâu dài.</li>
<li class=""><strong>Cân bằng công việc và gia đình</strong>: Ở tuổi 40, nhiều người có trách nhiệm gia đình. Hãy tìm cách tối ưu hóa thời gian làm việc để không bị kiệt sức.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-lời-khuyên-cụ-thể">3. Lời khuyên cụ thể<a href="https://huudinh.github.io/blogs/blog/toi-co-the-lap-trinh-den-nam-bao-nhieu-tuoi#3-l%E1%BB%9Di-khuy%C3%AAn-c%E1%BB%A5-th%E1%BB%83" class="hash-link" aria-label="Đường dẫn trực tiếp đến 3. Lời khuyên cụ thể" title="Đường dẫn trực tiếp đến 3. Lời khuyên cụ thể" translate="no">​</a></h3>
<ul>
<li class=""><strong>Đánh giá bản thân</strong>: Xác định điểm mạnh, điểm yếu, và điều bạn thực sự muốn làm trong 5-10 năm tới. Bạn muốn tiếp tục viết code, trở thành lãnh đạo, hay thử sức ở một lĩnh vực mới?</li>
<li class=""><strong>Đầu tư thời gian hợp lý</strong>: Không cần chạy theo mọi xu hướng công nghệ. Hãy chọn lọc những gì phù hợp với mục tiêu nghề nghiệp của bạn.</li>
<li class=""><strong>Tận dụng kinh nghiệm</strong>: Kinh nghiệm của bạn là tài sản lớn nhất. Hãy sử dụng nó để giải quyết các vấn đề phức tạp hoặc dẫn dắt đội nhóm.</li>
<li class=""><strong>Tìm niềm vui trong công việc</strong>: Chọn con đường khiến bạn cảm thấy hứng thú và có ý nghĩa, thay vì chỉ chạy theo tiền bạc hoặc áp lực xã hội.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-quan-điểm-về-ngưỡng-cửa-40-tuổi">4. Quan điểm về "ngưỡng cửa 40 tuổi"<a href="https://huudinh.github.io/blogs/blog/toi-co-the-lap-trinh-den-nam-bao-nhieu-tuoi#4-quan-%C4%91i%E1%BB%83m-v%E1%BB%81-ng%C6%B0%E1%BB%A1ng-c%E1%BB%ADa-40-tu%E1%BB%95i" class="hash-link" aria-label="Đường dẫn trực tiếp đến 4. Quan điểm về &quot;ngưỡng cửa 40 tuổi&quot;" title="Đường dẫn trực tiếp đến 4. Quan điểm về &quot;ngưỡng cửa 40 tuổi&quot;" translate="no">​</a></h3>
<p>Quan niệm rằng 40 tuổi là ngưỡng cửa để lập trình viên phải "nghỉ hưu" hoặc chuyển nghề là không chính xác. Nhiều lập trình viên vẫn viết code và thành công ở độ tuổi 50, 60, miễn là họ duy trì đam mê và khả năng học hỏi. Tuổi 40 chỉ là một cột mốc để bạn đánh giá lại và điều chỉnh hướng đi, không phải là rào cản.</p>
<p>Nếu bạn muốn thảo luận chi tiết hơn về một hướng đi cụ thể (ví dụ: học công nghệ nào, chuyển sang quản lý ra sao), hãy cho mình biết thêm về tình huống và mục tiêu của bạn nhé!</p>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tôi có thể theo đuổi nghè lập trình Frontend không?]]></title>
        <id>https://huudinh.github.io/blogs/blog/toi-co-the-theo-duoi-nghe-lap-trinh-frontend-khong</id>
        <link href="https://huudinh.github.io/blogs/blog/toi-co-the-theo-duoi-nghe-lap-trinh-frontend-khong"/>
        <updated>2025-08-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Khi tự đánh giá mình có học lực và tư duy logic ở mức “bình thường”...]]></summary>
        <content type="html"><![CDATA[<p>Khi tự đánh giá mình có học lực và tư duy logic ở mức “bình thường”...</p>
<p>Câu hỏi này rất thực tế và mình đã thẳng thắn nhìn nhận bản thân. Câu trả lời là: <strong>hoàn toàn có thể theo đuổi lập trình Frontend</strong>, ngay cả khi bạn tự đánh giá mình có học lực và tư duy logic ở mức “bình thường”.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="vì-sao-bạn-vẫn-có-thể-theo-đuổi-frontend">Vì sao bạn vẫn có thể theo đuổi Frontend?<a href="https://huudinh.github.io/blogs/blog/toi-co-the-theo-duoi-nghe-lap-trinh-frontend-khong#v%C3%AC-sao-b%E1%BA%A1n-v%E1%BA%ABn-c%C3%B3-th%E1%BB%83-theo-%C4%91u%E1%BB%95i-frontend" class="hash-link" aria-label="Đường dẫn trực tiếp đến Vì sao bạn vẫn có thể theo đuổi Frontend?" title="Đường dẫn trực tiếp đến Vì sao bạn vẫn có thể theo đuổi Frontend?" translate="no">​</a></h3>
<ul>
<li class="">
<p><strong>Frontend không đòi hỏi phải là “thiên tài toán học”</strong><br>
<!-- -->Khác với một số lĩnh vực như AI hay xử lý dữ liệu lớn, Frontend thiên về <strong>tư duy giao diện</strong>, <strong>trải nghiệm người dùng</strong>, và <strong>tính thẩm mỹ</strong>. Những kỹ năng này có thể rèn luyện qua thực hành, không cần IQ cao.</p>
</li>
<li class="">
<p><strong>Kỹ năng thực tế quan trọng hơn điểm số</strong><br>
<!-- -->Nhà tuyển dụng Frontend thường quan tâm đến <strong>portfolio</strong>, <strong>dự án cá nhân</strong>, và khả năng làm việc nhóm hơn là học lực. Nếu bạn làm được một website đẹp, responsive, có UX tốt — thì bạn đã ghi điểm rồi.</p>
</li>
<li class="">
<p><strong>Tư duy logic có thể cải thiện qua luyện tập</strong><br>
<!-- -->Bạn không cần phải giỏi logic ngay từ đầu. Việc học JavaScript, xử lý DOM, hay làm việc với React sẽ giúp bạn rèn luyện tư duy từng bước. Quan trọng là <strong>kiên trì và không bỏ cuộc</strong>.</p>
</li>
<li class="">
<p><strong>Tài nguyên học tập rất dễ tiếp cận</strong><br>
<!-- -->Có hàng ngàn khóa học miễn phí, video hướng dẫn, và cộng đồng hỗ trợ. Bạn không đơn độc đâu.</p>
</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="gợi-ý-lộ-trình-học-frontend-cho-người-mới-bắt-đầu">Gợi ý lộ trình học Frontend cho người mới bắt đầu<a href="https://huudinh.github.io/blogs/blog/toi-co-the-theo-duoi-nghe-lap-trinh-frontend-khong#g%E1%BB%A3i-%C3%BD-l%E1%BB%99-tr%C3%ACnh-h%E1%BB%8Dc-frontend-cho-ng%C6%B0%E1%BB%9Di-m%E1%BB%9Bi-b%E1%BA%AFt-%C4%91%E1%BA%A7u" class="hash-link" aria-label="Đường dẫn trực tiếp đến Gợi ý lộ trình học Frontend cho người mới bắt đầu" title="Đường dẫn trực tiếp đến Gợi ý lộ trình học Frontend cho người mới bắt đầu" translate="no">​</a></h3>
<table><thead><tr><th>Giai đoạn</th><th>Mục tiêu</th><th>Công cụ gợi ý</th></tr></thead><tbody><tr><td>1. Cơ bản</td><td>HTML, CSS, JavaScript</td><td>freeCodeCamp, W3Schools</td></tr><tr><td>2. Thực hành</td><td>Làm website đơn giản</td><td>GitHub, CodePen</td></tr><tr><td>3. Framework</td><td>Học React hoặc Vue</td><td>Scrimba, Udemy</td></tr><tr><td>4. Dự án</td><td>Làm portfolio cá nhân</td><td>Netlify, Vercel</td></tr><tr><td>5. Kỹ năng mềm</td><td>Giao tiếp, teamwork</td><td>Tham gia nhóm học, hackathon</td></tr></tbody></table>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="một-lời-nhắn-riêng-cho-bạn">Một lời nhắn riêng cho bạn<a href="https://huudinh.github.io/blogs/blog/toi-co-the-theo-duoi-nghe-lap-trinh-frontend-khong#m%E1%BB%99t-l%E1%BB%9Di-nh%E1%BA%AFn-ri%C3%AAng-cho-b%E1%BA%A1n" class="hash-link" aria-label="Đường dẫn trực tiếp đến Một lời nhắn riêng cho bạn" title="Đường dẫn trực tiếp đến Một lời nhắn riêng cho bạn" translate="no">​</a></h3>
<p>Bạn không cần phải là người giỏi nhất — bạn chỉ cần là người <strong>kiên trì nhất</strong>. Nếu bạn học mỗi ngày một chút, làm từng dự án nhỏ, và không ngại hỏi khi gặp khó khăn, thì bạn sẽ tiến xa hơn rất nhiều người bắt đầu với lợi thế nhưng bỏ cuộc giữa chừng.</p>
<p>Nếu bạn muốn, mình có thể giúp bạn lên một kế hoạch học cụ thể theo thời gian biểu của bạn. Bạn đang có bao nhiêu thời gian mỗi tuần để học?</p>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tạo Blog miễn phí với Docusaurus]]></title>
        <id>https://huudinh.github.io/blogs/blog/tao-blog-mien-phi</id>
        <link href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi"/>
        <updated>2025-08-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tạo blog đơn giản với Docusaurus...]]></summary>
        <content type="html"><![CDATA[<p>Tạo blog đơn giản với Docusaurus...</p>
<p>Docusaurus là một <strong>công cụ tạo trang web tĩnh mã nguồn mở</strong> được phát triển bởi Meta (Facebook), chuyên dùng để xây dựng <strong>trang tài liệu</strong>, <strong>blog cá nhân</strong>, hoặc <strong>trang giới thiệu sản phẩm</strong> một cách nhanh chóng và dễ dàng.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="điểm-nổi-bật-của-docusaurus">Điểm nổi bật của Docusaurus<a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#%C4%91i%E1%BB%83m-n%E1%BB%95i-b%E1%BA%ADt-c%E1%BB%A7a-docusaurus" class="hash-link" aria-label="Đường dẫn trực tiếp đến Điểm nổi bật của Docusaurus" title="Đường dẫn trực tiếp đến Điểm nổi bật của Docusaurus" translate="no">​</a></h3>
<ul>
<li class=""><strong>Viết bằng Markdown</strong>: Bạn chỉ cần viết nội dung bằng Markdown, Docusaurus sẽ tự động chuyển thành giao diện web đẹp mắt.</li>
<li class=""><strong>Tích hợp React</strong>: Nếu bạn biết React, bạn có thể dễ dàng tùy biến giao diện và chức năng. Nếu không biết, vẫn dùng được ngon lành!</li>
<li class=""><strong>Hỗ trợ đa ngôn ngữ</strong>: Dễ dàng tạo trang web hỗ trợ nhiều ngôn ngữ khác nhau.</li>
<li class=""><strong>Tối ưu SEO</strong>: Giúp trang web của bạn dễ dàng được tìm thấy trên Google.</li>
<li class=""><strong>Tích hợp Git</strong>: Quản lý phiên bản tài liệu hiệu quả.</li>
<li class=""><strong>Hỗ trợ blog</strong>: Ngoài tài liệu, bạn có thể viết blog và quản lý bài viết như một CMS đơn giản.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="docusaurus-dùng-để-làm-gì">Docusaurus dùng để làm gì?<a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#docusaurus-d%C3%B9ng-%C4%91%E1%BB%83-l%C3%A0m-g%C3%AC" class="hash-link" aria-label="Đường dẫn trực tiếp đến Docusaurus dùng để làm gì?" title="Đường dẫn trực tiếp đến Docusaurus dùng để làm gì?" translate="no">​</a></h3>
<ul>
<li class="">Tạo tài liệu cho dự án phần mềm</li>
<li class="">Viết blog cá nhân hoặc nhóm</li>
<li class="">Xây dựng trang web giới thiệu sản phẩm</li>
<li class="">Làm landing page cho startup hoặc dự án cá nhân</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cài-đặt-nhanh">Cài đặt nhanh<a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#c%C3%A0i-%C4%91%E1%BA%B7t-nhanh" class="hash-link" aria-label="Đường dẫn trực tiếp đến Cài đặt nhanh" title="Đường dẫn trực tiếp đến Cài đặt nhanh" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npx create-docusaurus@latest my-website classic</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cd my-website</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm start</span><br></div></code></pre></div></div>
<p>Sau đó truy cập <code>http://localhost:3000</code> để xem trang web của bạn.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cấu-hình-và-deploy-lên-github">Cấu hình và Deploy lên github<a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#c%E1%BA%A5u-h%C3%ACnh-v%C3%A0-deploy-l%C3%AAn-github" class="hash-link" aria-label="Đường dẫn trực tiếp đến Cấu hình và Deploy lên github" title="Đường dẫn trực tiếp đến Cấu hình và Deploy lên github" translate="no">​</a></h3>
<p>Để deploy <strong>Docusaurus</strong> lên <strong>GitHub Pages</strong> và cho chạy luôn (live site), bạn làm theo các bước sau:</p>
<hr>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="bước-1-cấu-hình-docusaurusconfigjs">BƯỚC 1: CẤU HÌNH <code>docusaurus.config.js</code><a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#b%C6%B0%E1%BB%9Bc-1-c%E1%BA%A5u-h%C3%ACnh-docusaurusconfigjs" class="hash-link" aria-label="Đường dẫn trực tiếp đến bước-1-cấu-hình-docusaurusconfigjs" title="Đường dẫn trực tiếp đến bước-1-cấu-hình-docusaurusconfigjs" translate="no">​</a></h4>
<p>Mở file <code>docusaurus.config.js</code> và chỉnh sửa:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">module</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">exports</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Thay bằng tên repo của bạn</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">url</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://&lt;tên-user&gt;.github.io'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">baseUrl</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'/&lt;tên-repo&gt;/'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Ví dụ: url: 'https://huudinh.github.io', baseUrl: '/my-docs/',</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token spread operator" style="color:#393A34">...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">organizationName</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'&lt;tên-user&gt;'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// GitHub username</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">projectName</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'&lt;tên-repo&gt;'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// repo name</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">deploymentBranch</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'gh-pages'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// branch để deploy (mặc định là gh-pages)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<hr>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="bước-2-thêm-script-vào-packagejson">BƯỚC 2: THÊM SCRIPT VÀO <code>package.json</code><a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#b%C6%B0%E1%BB%9Bc-2-th%C3%AAm-script-v%C3%A0o-packagejson" class="hash-link" aria-label="Đường dẫn trực tiếp đến bước-2-thêm-script-vào-packagejson" title="Đường dẫn trực tiếp đến bước-2-thêm-script-vào-packagejson" translate="no">​</a></h4>
<p>Trong file <code>package.json</code>, thêm 2 script:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token property" style="color:#36acaa">"scripts"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"predeploy"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"docusaurus build"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"deploy"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"docusaurus deploy"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<hr>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="bước-3-tạo-repo-trên-github">BƯỚC 3: TẠO REPO TRÊN GITHUB<a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#b%C6%B0%E1%BB%9Bc-3-t%E1%BA%A1o-repo-tr%C3%AAn-github" class="hash-link" aria-label="Đường dẫn trực tiếp đến BƯỚC 3: TẠO REPO TRÊN GITHUB" title="Đường dẫn trực tiếp đến BƯỚC 3: TẠO REPO TRÊN GITHUB" translate="no">​</a></h4>
<ul>
<li class="">Lên GitHub tạo repository tên là <code>&lt;tên-repo&gt;</code> (phải khớp với <code>projectName</code> ở bước 1).</li>
<li class="">Ví dụ: bạn có GitHub username là <code>huudinh</code>, repo là <code>my-docs</code>.</li>
</ul>
<hr>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="bước-4-khởi-tạo-git-nếu-chưa-có">BƯỚC 4: KHỞI TẠO GIT (NẾU CHƯA CÓ)<a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#b%C6%B0%E1%BB%9Bc-4-kh%E1%BB%9Fi-t%E1%BA%A1o-git-n%E1%BA%BFu-ch%C6%B0a-c%C3%B3" class="hash-link" aria-label="Đường dẫn trực tiếp đến BƯỚC 4: KHỞI TẠO GIT (NẾU CHƯA CÓ)" title="Đường dẫn trực tiếp đến BƯỚC 4: KHỞI TẠO GIT (NẾU CHƯA CÓ)" translate="no">​</a></h4>
<p>Trong thư mục Docusaurus:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">git init</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">git remote add origin https://github.com/&lt;tên-user&gt;/&lt;tên-repo&gt;.git</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">git add .</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">git commit -m "Initial commit"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">git push -u origin main</span><br></div></code></pre></div></div>
<hr>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="bước-5-chạy-deploy">BƯỚC 5: CHẠY DEPLOY<a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#b%C6%B0%E1%BB%9Bc-5-ch%E1%BA%A1y-deploy" class="hash-link" aria-label="Đường dẫn trực tiếp đến BƯỚC 5: CHẠY DEPLOY" title="Đường dẫn trực tiếp đến BƯỚC 5: CHẠY DEPLOY" translate="no">​</a></h4>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npm run deploy</span><br></div></code></pre></div></div>
<p>Docusaurus sẽ:</p>
<ul>
<li class="">build site tĩnh vào thư mục <code>build/</code></li>
<li class="">push lên branch <code>gh-pages</code></li>
<li class="">GitHub Pages sẽ tự động publish branch <code>gh-pages</code>.</li>
</ul>
<hr>
<p>Trường hợp phát sinh lỗi bạn cần cấu hình lại tài khoản github cho blogs bằng lệnh sau</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">set GIT_USER=ten-tai-khoan</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="bước-6-truy-cập-website">BƯỚC 6: TRUY CẬP WEBSITE<a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#b%C6%B0%E1%BB%9Bc-6-truy-c%E1%BA%ADp-website" class="hash-link" aria-label="Đường dẫn trực tiếp đến BƯỚC 6: TRUY CẬP WEBSITE" title="Đường dẫn trực tiếp đến BƯỚC 6: TRUY CẬP WEBSITE" translate="no">​</a></h4>
<p>Truy cập tại:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">https://&lt;tên-user&gt;.github.io/&lt;tên-repo&gt;/</span><br></div></code></pre></div></div>
<p>Ví dụ:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">https://huudinh.github.io/blogs/</span><br></div></code></pre></div></div>
<hr>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="mỗi-lần-update">MỖI LẦN UPDATE<a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#m%E1%BB%97i-l%E1%BA%A7n-update" class="hash-link" aria-label="Đường dẫn trực tiếp đến MỖI LẦN UPDATE" title="Đường dẫn trực tiếp đến MỖI LẦN UPDATE" translate="no">​</a></h4>
<p>Sau khi cập nhật nội dung docs, chỉ cần:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npm run deploy</span><br></div></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="chỉnh-sửa-css">Chỉnh sửa CSS<a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#ch%E1%BB%89nh-s%E1%BB%ADa-css" class="hash-link" aria-label="Đường dẫn trực tiếp đến Chỉnh sửa CSS" title="Đường dẫn trực tiếp đến Chỉnh sửa CSS" translate="no">​</a></h2>
<p>Bạn có thể thêm hoặc sửa các file CSS trong thư mục src/css.</p>
<p>Bước 1: Tạo hoặc mở file src/css/custom.css</p>
<p>Bước 2: Thêm các đoạn CSS bạn muốn sửa, ví dụ:</p>
<div class="language-css codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-css codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">/* Thay đổi màu nền của body */</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token selector" style="color:#00009f">body</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">background-color</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token hexcode color">#f0f0f0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">/* Tùy chỉnh font cho tiêu đề */</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token selector" style="color:#00009f">h1</span><span class="token selector punctuation" style="color:#393A34">,</span><span class="token selector" style="color:#00009f"> h2</span><span class="token selector punctuation" style="color:#393A34">,</span><span class="token selector" style="color:#00009f"> h3</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">font-family</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Roboto'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> sans-serif</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">/* Chỉnh cỡ chữ tiêu đề blogs */</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token selector" style="color:#00009f">h1</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">font-size</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2.5</span><span class="token unit">rem</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/* hoặc 40px */</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token selector" style="color:#00009f">h2</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">font-size</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token unit">rem</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token selector" style="color:#00009f">h3</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">font-size</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1.5</span><span class="token unit">rem</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">/* Chỉnh cỡ chữ nội dung bài viết */</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token selector" style="color:#00009f">article p</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">font-size</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1.1</span><span class="token unit">rem</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">line-height</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1.8</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="chạy-react-code-trong-docusaurus">Chạy react code trong Docusaurus?<a href="https://huudinh.github.io/blogs/blog/tao-blog-mien-phi#ch%E1%BA%A1y-react-code-trong-docusaurus" class="hash-link" aria-label="Đường dẫn trực tiếp đến Chạy react code trong Docusaurus?" title="Đường dẫn trực tiếp đến Chạy react code trong Docusaurus?" translate="no">​</a></h2>
<p>Docusaurus hỗ trợ MDX, một định dạng kết hợp giữa Markdown và JSX, cho phép bạn chạy React code trực tiếp trong file .mdx. Đây là một trong những điểm mạnh nhất của Docusaurus: bạn vừa viết tài liệu bằng Markdown, vừa nhúng component React để hiển thị nội dung tương tác.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">--</span><span class="token plain"> </span><span class="token maybe-class-name">Demo</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token plain"> </span><span class="token maybe-class-name">Component</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">--</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">HelloButton</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">handleClick</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">alert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Xin chào từ React!'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">handleClick</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Bấm vào đây</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">HelloButton</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></div></code></pre></div></div>
<!-- -->
<!-- -->
<button>Bấm vào đây</button>]]></content>
        <author>
            <name>Dinh Trieu</name>
            <uri>https://thaygiaofrontend.com</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
</feed>