Free tutorials & notes in Hindi & English · Clean code examples 🧰 Free PDF & Image Tools →
🚀 SEO, Performance & Deploy  ·  Lesson 27

Metadata & SEO

What Google needs from a page

🔒 google.com/search?q=nextjs+course+in+hindiedusite.in › courses › nextjsNext.js Course (6 weeks) | EduSiteReact + Next.js App Router, APIs, database, SEO and deployment. Fee ₹4,499…⭐ Course · ₹4,499 · Intermediate ← from JSON-LD
  • Title — the blue link; most important for clicks.
  • Description — the grey text under it.
  • Canonical URL — which URL is the "real" one.
  • Structured data — extra details (price, rating, FAQ).

Static metadata

JSX – export const metadata
// app/courses/page.jsx  (EduSite)
export const metadata = {
  title: 'All Courses',
  description: 'Coding courses in C, Python, Web Development, Next.js, Android and MySQL with fees and duration.',
  alternates: { canonical: '/courses' },
}
Generated HTML in <head>
<title>All Courses | EduSite</title> <meta name="description" content="Coding courses in C, Python, Web Development, …"> <link rel="canonical" href="https://edusite.in/courses">

Title templates in the root layout

JSX – app/layout.jsx
// app/layout.jsx  (EduSite)
import { site } from '@/lib/site'

export const metadata = {
  metadataBase: new URL(site.url),          // makes relative URLs absolute
  title: {
    default: `${site.name} – ${site.tagline}`,   // used when a page sets no title
    template: `%s | ${site.name}`,                // "All Courses | EduSite"
  },
  description: site.description,
  alternates: { canonical: '/' },
  openGraph: { type: 'website', siteName: site.name, locale: 'en_IN' },
  twitter: { card: 'summary_large_image' },
  robots: { index: true, follow: true },
}

export const viewport = { themeColor: '#4f46e5' }
layout: template '%s | EduSite'page: title 'All Courses'<title>All Courses | EduSite
Pages only write their own part

generateMetadata for dynamic pages

JSX – generateMetadata
// app/courses/[slug]/page.jsx  (EduSite)
export async function generateMetadata({ params }) {
  const { slug } = await params
  const course = getCourse(slug)
  if (!course) return { title: 'Course not found' }
  return {
    title: `${course.title} Course (${course.duration})`,
    description: `${course.summary} Fee ${rupees(course.fee)}. Level: ${course.level}.`,
    alternates: { canonical: `/courses/${course.slug}` },
    openGraph: { images: [course.image] },
  }
}
Generated HTML for /courses/nextjs
<title>Next.js Course (6 weeks) | EduSite</title> <meta name="description" content="React + Next.js App Router, APIs, database, SEO and deployment. Fee ₹4,499. Level: Intermediate."> <link rel="canonical" href="https://edusite.in/courses/nextjs"> <meta property="og:image" content="https://edusite.in/images/nextjs.png">

Canonical URLs and metadataBase

The same page can be reached at /courses, /courses?ref=fb and /courses?q=. A canonical tag tells Google which one to index so ranking is not split. With metadataBase set once, you can write short paths like '/courses'.

Open Graph and social images

When someone shares your link on WhatsApp, Facebook or LinkedIn, the OG image and title appear. A file named opengraph-image.jsx generates that image automatically.

JSX – app/opengraph-image.jsx
// app/opengraph-image.jsx  (EduSite) — generates a 1200×630 PNG
import { ImageResponse } from 'next/og'
import { site } from '@/lib/site'

export const alt = `${site.name} – ${site.tagline}`
export const size = { width: 1200, height: 630 }
export const contentType = 'image/png'

export default function OpengraphImage() {
  return new ImageResponse(
    (
      <div style={{ width: '100%', height: '100%', display: 'flex', flexDirection: 'column',
                    justifyContent: 'center', padding: 80,
                    background: 'linear-gradient(135deg,#4f46e5,#0f172a)', color: '#fff' }}>
        <div style={{ fontSize: 88, fontWeight: 800 }}>{site.name}</div>
        <div style={{ fontSize: 44, marginTop: 16, opacity: 0.9 }}>{site.tagline}</div>
      </div>
    ),
    size
  )
}
9:41▮▮ 85%WhatsApp⋮🖼️OG image 1200×630EduSite – Learn codi…edusite.inThe preview image comes fromapp/opengraph-image.jsx
Share preview

JSON-LD structured data

JSX – components/JsonLd.jsx + usage
// components/JsonLd.jsx  (EduSite)
export default function JsonLd({ data }) {
  return (
    <script type="application/ld+json"
      dangerouslySetInnerHTML={{ __html: JSON.stringify(data).replace(/</g, '\\u003c') }} />
  )
}

// app/courses/[slug]/page.jsx — Course schema
<JsonLd data={{
  '@context': 'https://schema.org',
  '@type': 'Course',
  name: course.title,
  description: course.summary,
  provider: { '@type': 'Organization', name: site.name, sameAs: site.url },
  offers: { '@type': 'Offer', price: course.fee, priceCurrency: 'INR', category: 'Paid' },
}} />

// app/blog/[slug]/page.jsx — BlogPosting schema
<JsonLd data={{
  '@context': 'https://schema.org',
  '@type': 'BlogPosting',
  headline: post.title,
  datePublished: post.date,
  author: { '@type': 'Organization', name: site.name },
}} />

Writing titles that get clicks

❌ Weak✅ Strong
Next.jsNext.js Course (6 weeks) – Fee ₹4,499 | EduSite
Blog post 1How to Start Coding in 2026: 30-Day Plan for Beginners
ContactContact Us – Book a Free Demo Class

Put the main keyword first, add a number or benefit, keep under ~60 characters, and write a description that ends with a reason to click.

How to check your SEO

  1. 1View page source (Ctrl+U) → check , description, canonical</span></li><li><b class="n">2</b><span>Google Rich Results Test → validate JSON-LD</span></li><li><b class="n">3</b><span>Lighthouse → SEO score should be 100</span></li><li><b class="n">4</b><span>Google Search Console → submit sitemap, watch impressions and CTR</span></li></ol><figcaption>SEO checklist</figcaption></figure></section> <section> <h2 id="mistakes">Common mistakes</h2> <ul> <li>Same title on every page → Google rewrites them and CTR drops.</li> <li>Missing <code>metadataBase</code> → OG image URLs are relative and previews break.</li> <li>Putting <code>'use client'</code> on page.jsx → metadata export stops working.</li> <li>JSON-LD that does not match visible content → can cause a manual penalty.</li> </ul> </section> <section> <h2 id="summary">Summary</h2> <ul> <li><code>metadata</code> for static pages, <code>generateMetadata</code> for dynamic ones.</li> <li>Root layout: <code>metadataBase</code> + title template + defaults.</li> <li>Canonical, OG image and JSON-LD complete the SEO picture.</li> </ul> <div class="info-box tip"><div class="box-title">✅ Practice</div><p>Give every page a unique title/description, add Course JSON-LD to course pages and test one URL in Google's Rich Results Test.</p></div> </section> <section class="ce-faq"><h2>Frequently Asked Questions</h2><details class="ce-faq-item"><summary>Can I use metadata in a Client Component?</summary><div class="ce-faq-a">No. The metadata export and generateMetadata only work in Server Components (page.jsx and layout.jsx). Keep pages as Server Components and move interactivity into child components.</div></details><details class="ce-faq-item"><summary>What length should a title and description be?</summary><div class="ce-faq-a">Aim for titles under about 60 characters and descriptions around 140–160 characters so Google shows them fully in search results.</div></details><details class="ce-faq-item"><summary>Is JSON-LD required for ranking?</summary><div class="ce-faq-a">It is not a direct ranking factor, but it helps Google understand the page and can produce rich results (FAQ, course, breadcrumb), which increases clicks.</div></details></section></div> <div style="margin-top:32px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;"> <button class="mark-done-btn btn-primary">✓ Mark as Done</button> <a href="/tutorial/nextjs/" style="font-size:0.85rem;color:var(--text-muted);">← Next.js Tutorial</a> </div> <style> .ckf-share{margin:30px 0 8px;background:linear-gradient(135deg,#eafff1,#ffffff 70%);border:1px solid #cbe8d4;border-radius:18px;padding:20px;box-shadow:0 8px 22px rgba(22,163,74,.08);font-family:inherit} .ckf-share-head{display:flex;gap:12px;align-items:flex-start;margin-bottom:15px} .ckf-share-icon{font-size:1.6rem;line-height:1;flex-shrink:0} .ckf-share-title{font-weight:800;font-size:1.05rem;color:#111827;margin:0} .ckf-share-sub{font-size:.86rem;color:#5b6470;margin-top:3px;line-height:1.5} .ckf-share-actions{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px} .ckf-share-btn{display:inline-flex;align-items:center;gap:7px;border:1px solid #cbe8d4;background:#fff;color:#1f2937;font-weight:700;font-size:.88rem;padding:10px 16px;border-radius:999px;cursor:pointer;transition:all .18s ease;line-height:1;text-decoration:none} .ckf-share-btn:hover{transform:translateY(-2px);box-shadow:0 8px 18px rgba(17,24,39,.12)} .ckf-share-btn.wa:hover{border-color:#25d366;color:#128c44;background:#eafff1} .ckf-share-btn.tg:hover{border-color:#229ed9;color:#176f9b;background:#e8f6fd} .ckf-share-btn.cp:hover{border-color:#b8901f;color:#b8901f;background:#fdf6e3} .ckf-share-btn.nt:hover{border-color:#16a34a;color:#15803d;background:#eafff1} .ckf-share-link{width:100%;box-sizing:border-box;border:1px dashed #cbe8d4;background:#fbfdfa;border-radius:12px;padding:11px 13px;font-family:monospace;font-size:.82rem;color:#6b7280;outline:none} .ckf-share-link:focus{border-color:#16a34a;background:#fff;color:#1f2937} @media(max-width:560px){.ckf-share-btn{flex:1 1 auto;justify-content:center}} </style> <div class="ckf-share" data-share-url="https://codingeasily.in/tutorial/nextjs/nextjs-metadata-seo/" data-share-en="Metadata & SEO" data-share-hi="Metadata और SEO"> <div class="ckf-share-head"> <span class="ckf-share-icon">🔗</span> <div> <p class="ckf-share-title english-content">Share this topic with a friend</p> <p class="ckf-share-title hindi-content">यह topic किसी दोस्त को भेजें</p> <p class="ckf-share-sub english-content">Found it useful? Send it to a classmate learning the same thing.</p> <p class="ckf-share-sub hindi-content">अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।</p> </div> </div> <div class="ckf-share-actions"> <button type="button" class="ckf-share-btn wa" data-net="whatsapp"><span>💬</span><span>WhatsApp</span></button> <button type="button" class="ckf-share-btn tg" data-net="telegram"><span>✈️</span><span>Telegram</span></button> <button type="button" class="ckf-share-btn cp" data-net="copy"><span>📋</span><span class="english-content">Copy Link</span><span class="hindi-content">Link Copy</span></button> <button type="button" class="ckf-share-btn nt" data-net="native"><span>📤</span><span class="english-content">More</span><span class="hindi-content">और</span></button> </div> <input type="text" class="ckf-share-link" readonly value="https://codingeasily.in/tutorial/nextjs/nextjs-metadata-seo/" aria-label="Topic link" onclick="this.select()"> </div> <script> (function(){ var box = document.currentScript.previousElementSibling; if(!box || !box.classList.contains('ckf-share')) { var boxes = document.getElementsByClassName('ckf-share'); box = boxes[boxes.length-1]; } if(!box) return; var url = box.getAttribute('data-share-url') || location.href; function isHi(){ return document.body.classList.contains('body-hi') || (document.querySelector('.hindi-content') && getComputedStyle(document.querySelector('.hindi-content')).display !== 'none'); } function title(){ return isHi() ? (box.getAttribute('data-share-hi')||'') : (box.getAttribute('data-share-en')||''); } function msg(){ return isHi() ? ('यह free tutorial देखो CodingEasily पर: ' + title() + '\n' + url) : ('Check out this free tutorial on CodingEasily: ' + title() + '\n' + url); } function flash(btn){ var s=btn.querySelector('span:last-child'); if(!s)return; var o=s.textContent; s.textContent='✓ Copied'; setTimeout(function(){s.textContent=o;},1500); } var btns = box.querySelectorAll('.ckf-share-btn'); for(var i=0;i<btns.length;i++){ btns[i].addEventListener('click', function(){ var net=this.getAttribute('data-net'); var self=this; if(net==='whatsapp'){ window.open('https://wa.me/?text='+encodeURIComponent(msg()),'_blank'); } else if(net==='telegram'){ window.open('https://t.me/share/url?url='+encodeURIComponent(url)+'&text='+encodeURIComponent(title()),'_blank'); } else if(net==='copy'){ if(navigator.clipboard){navigator.clipboard.writeText(url).then(function(){flash(self);});} else {var t=document.createElement('textarea');t.value=url;document.body.appendChild(t);t.select();try{document.execCommand('copy');flash(self);}catch(e){}document.body.removeChild(t);} } else if(net==='native'){ if(navigator.share){navigator.share({title:title(),text:title(),url:url});} else if(navigator.clipboard){navigator.clipboard.writeText(url).then(function(){flash(self);});} } }); } })(); </script> <nav class="topic-nav"> <a href="/tutorial/nextjs/nextjs-env-config/" class="topic-nav-btn"><span style="font-size:1.2rem;">←</span> <div><div class="tnb-label">Previous</div><div class="tnb-title">Environment Variables & next.config</div></div></a> <a href="/tutorial/nextjs/nextjs-sitemap-robots/" class="topic-nav-btn" style="text-align:right;margin-left:auto;"> <div><div class="tnb-label">Next Lesson</div><div class="tnb-title">sitemap.xml, robots.txt & JSON-LD</div></div><span style="font-size:1.2rem;">→</span></a> </nav> </main> <script> document.querySelectorAll('.lsi-btn[data-lang]').forEach(function (b) { b.addEventListener('click', function () { var u = new URL(window.location.href); if (this.dataset.lang === 'hi') u.searchParams.set('lang', 'hi'); else u.searchParams.delete('lang'); window.location.assign(u.toString()); }); }); </script> <aside class="tutorial-right"> <div class="right-section"> <div class="right-title">On This Page</div> <ul class="toc-list"><li><a href="#why">What Google needs from a page</a></li><li><a href="#static">Static metadata</a></li><li><a href="#template">Title templates in the root layout</a></li><li><a href="#dynamic">generateMetadata for dynamic pages</a></li><li><a href="#canonical">Canonical URLs and metadataBase</a></li><li><a href="#og">Open Graph and social images</a></li><li><a href="#jsonld">JSON-LD structured data</a></li><li><a href="#ctr">Writing titles that get clicks</a></li><li><a href="#check">How to check your SEO</a></li><li><a href="#mistakes">Common mistakes</a></li><li><a href="#summary">Summary</a></li></ul> </div> <div class="right-section"> <div class="right-title">Project Code</div> <a href="/download/nextjs-edusite-project/" class="ut-side" style="display:flex;gap:9px;align-items:center;padding:10px;border-radius:12px;border:1.5px solid #c7d2fe;text-decoration:none;color:#1e293b;background:#f5f7ff"> <span aria-hidden="true">⬇️</span><span><b style="color:#4338ca">Download EduSite (Next.js)</b><small style="display:block;color:#475569;font-size:.74rem">Full source code (ZIP) · free login</small></span> </a> </div> <div class="right-section"> <div class="right-title">Free Tools</div> <a class="ut-side" href="https://upyogitools.in/" target="_blank" rel="noopener" aria-label="UpyogiTools.in"> <span aria-hidden="true">🧰</span> <span><b>UpyogiTools.in</b><small>Free PDF & photo tools →</small></span> </a> </div> </aside> </div> </main> <style> .ce-ns{width:min(980px,calc(100% - 28px));margin:26px auto 0;display:flex;align-items:center;gap:16px;text-decoration:none;color:#fff;background:linear-gradient(135deg,#1d4ed8,#0ea5e9);border-radius:20px;padding:18px 20px;box-shadow:0 12px 28px rgba(29,78,216,.25)} .ce-ns:hover{filter:brightness(1.05)} .ce-ns:focus-visible{outline:3px solid #f97316;outline-offset:3px} .ce-ns .i{font-size:1.9rem;line-height:1} .ce-ns .t{flex:1;min-width:0} .ce-ns .k{font:800 .72rem/1 system-ui,sans-serif;letter-spacing:.08em;text-transform:uppercase;opacity:.9} .ce-ns .h{display:block;font-size:1.15rem;font-weight:900;margin:5px 0 8px;line-height:1.3} .ce-ns .bar{height:6px;border-radius:99px;background:rgba(255,255,255,.3);overflow:hidden} .ce-ns .bar b{display:block;height:100%;background:#fde68a;border-radius:99px} .ce-ns .s{font-size:.8rem;opacity:.9;margin-top:5px;display:block} .ce-ns .go{font-weight:900;background:#fff;color:#1d4ed8;border-radius:999px;padding:9px 14px;white-space:nowrap} @media(max-width:560px){.ce-ns{flex-wrap:wrap}.ce-ns .go{width:100%;text-align:center}} </style> <a class="ce-ns" href="/tutorial/nextjs/nextjs-sitemap-robots/"> <span class="i" aria-hidden="true">👉</span> <span class="t"><span class="k">Next topic</span><span class="h">sitemap.xml, robots.txt & JSON-LD</span> <span class="bar" aria-hidden="true"><b style="width:73%"></b></span> <span class="s">Your progress: 27 / 37 (73%) · Lesson 28 / 37</span></span> <span class="go">Continue →</span> </a> <style> .ce-fb{width:min(980px,calc(100% - 28px));margin:26px auto 8px;background:#fff;border:1px solid #e2e8f0;border-radius:18px;padding:18px 20px;box-shadow:0 6px 18px rgba(15,23,42,.05);font-size:.95rem;color:#1e293b} .ce-fb h2{margin:0;font-size:1.15rem;color:#14213d}.ce-fb .sub{margin:4px 0 12px;color:#64748b;font-size:.9rem} .ce-fb-votes{display:flex;flex-wrap:wrap;gap:10px;align-items:center} .ce-fb-v{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border-radius:999px;border:1.5px solid #cbd5e1;background:#f8fafc;font-weight:800;cursor:pointer;font-size:.95rem;color:#1e293b;min-height:44px} .ce-fb-v:hover{border-color:#16a34a}.ce-fb-v[aria-pressed=true]{background:#ecfdf5;border-color:#16a34a;color:#14532d} .ce-fb-v.dn[aria-pressed=true]{background:#fef2f2;border-color:#ef4444;color:#7f1d1d} .ce-fb-v b{font-variant-numeric:tabular-nums;color:#475569;font-weight:700} .ce-fb-st{font-size:.88rem;color:#15803d;font-weight:700;min-height:1.2em} .ce-fb details{margin-top:12px}.ce-fb summary{cursor:pointer;font-weight:800;color:#1d4ed8;padding:6px 0} .ce-fb form{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-top:10px} .ce-fb label{display:block;font-weight:700;font-size:.82rem;margin-bottom:4px;color:#334155} .ce-fb input,.ce-fb select,.ce-fb textarea{width:100%;box-sizing:border-box;padding:10px 12px;border:1.5px solid #cbd5e1;border-radius:10px;font:inherit;background:#f8fafc;color:#0f172a} .ce-fb textarea{min-height:92px;resize:vertical}.ce-fb .full{grid-column:1/-1} .ce-fb .hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden} .ce-fb button.send{justify-self:start;padding:11px 20px;border:0;border-radius:999px;background:linear-gradient(135deg,#16a34a,#15803d);color:#fff;font-weight:800;cursor:pointer;min-height:44px} .ce-fb .note{font-size:.78rem;color:#64748b;margin:0} .ce-fb-list{margin-top:14px;border-top:1px dashed #cbd5e1;padding-top:10px} .ce-fb-list h3{font-size:.95rem;margin:4px 0 8px;color:#0f766e} .ce-fb-r{padding:10px 12px;border-radius:12px;background:#f8fafc;border:1px solid #e2e8f0;margin-bottom:8px} .ce-fb-r .who{font-weight:800;font-size:.86rem;color:#14213d}.ce-fb-r .who small{color:#64748b;font-weight:600} .ce-fb-r p{margin:4px 0 0;color:#334155;line-height:1.55;white-space:pre-line} @media(max-width:640px){.ce-fb form{grid-template-columns:1fr}} </style> <section class="ce-fb" id="ce-feedback" aria-labelledby="ce-fb-h" data-cfg="{"api":"\/api\/feedback.php","page":"\/tutorial\/nextjs\/nextjs-metadata-seo\/","lang":"en","t":"1793086824.558e8a1ada362d4bb2b7816cec88b560","msg":{"thanks":"Thank you! Your vote is recorded.","ok":"Thank you! Your review has been received and will appear here after a quick check.","err":"Something went wrong. Please try again in a little while.","none":"No reviews yet \u2013 be the first to write one!","from":"from"},"learners":{"student":"Student (school\/college)","teacher":"Teacher","job":"Working professional","self":"Self-learner","other":"Other"}}"> <h2 id="ce-fb-h">How was this lesson?</h2> <p class="sub">Your feedback helps us make the content better.</p> <div class="ce-fb-votes"> <button type="button" class="ce-fb-v up" data-v="1" aria-pressed="false">👍 Helpful <b data-n="up"></b></button> <button type="button" class="ce-fb-v dn" data-v="-1" aria-pressed="false">👎 Not helpful <b data-n="dn"></b></button> <span class="ce-fb-st" role="status" aria-live="polite"></span> </div> <details> <summary>Write a review or suggestion (optional)</summary> <form novalidate> <div><label for="ce-fb-name">Your name *</label><input id="ce-fb-name" name="fb_name" maxlength="60" required autocomplete="name"></div> <div><label for="ce-fb-city">City / State</label><input id="ce-fb-city" name="city" maxlength="60" autocomplete="address-level2"></div> <div><label for="ce-fb-who">You are a…</label><select id="ce-fb-who" name="learner"><option value="">Choose</option><option value="student">Student (school/college)</option><option value="teacher">Teacher</option><option value="job">Working professional</option><option value="self">Self-learner</option><option value="other">Other</option></select></div> <div class="full"><label for="ce-fb-msg">Review or suggestion *</label><textarea id="ce-fb-msg" name="message" maxlength="1000" required placeholder="What you liked, what was unclear, which topic you want next…"></textarea></div> <div class="hp" aria-hidden="true"><label>Website<input name="website" tabindex="-1" autocomplete="off"></label></div> <p class="note full">After approval, your name and city may appear publicly with your review. Please do not write your email or phone number.</p> <button type="submit" class="send">Send review</button> </form> </details> <div class="ce-fb-list" hidden><h3>Reviews from readers</h3><div class="ce-fb-items"></div></div> </section> <script> (function(){var box=document.getElementById('ce-feedback');if(!box||box.__fb)return;box.__fb=1; var C;try{C=JSON.parse(box.getAttribute('data-cfg'))}catch(e){return} var st=box.querySelector('.ce-fb-st'),key='ce_fb_'+C.page,loaded=false; function get(k){try{return localStorage.getItem(k)}catch(e){return null}}function set(k,v){try{localStorage.setItem(k,v)}catch(e){}} function mark(v){box.querySelectorAll('.ce-fb-v').forEach(function(b){b.setAttribute('aria-pressed',String(b.getAttribute('data-v'))===String(v))})} function esc(s){var d=document.createElement('div');d.textContent=s==null?'':String(s);return d.innerHTML} function counts(d){box.querySelector('[data-n=up]').textContent=d.up?'('+d.up+')':'';box.querySelector('[data-n=dn]').textContent=d.down?'('+d.down+')':''} function list(d){var w=box.querySelector('.ce-fb-list'),it=box.querySelector('.ce-fb-items');w.hidden=false; if(!d.reviews||!d.reviews.length){it.innerHTML='<p class="note">'+esc(C.msg.none)+'</p>';return} it.innerHTML=d.reviews.map(function(r){var who=esc(r.name)+(r.city?' <small>'+(C.lang==='hi'?esc(r.city)+' '+esc(C.msg.from):esc(C.msg.from)+' '+esc(r.city))+'</small>':'')+(r.learner&&C.learners[r.learner]?' <small>· '+esc(C.learners[r.learner])+'</small>':''); return '<div class="ce-fb-r"><div class="who">'+(r.vote>0?'👍 ':r.vote<0?'👎 ':'')+who+'</div><p>'+esc(r.message)+'</p></div>'}).join('')} function load(){if(loaded)return;loaded=true;fetch(C.api+'?p='+encodeURIComponent(C.page),{credentials:'same-origin'}).then(function(r){return r.json()}).then(function(d){if(d&&d.ok){counts(d);list(d)}}).catch(function(){})} function post(data,cb){data.p=C.page;data.t=C.t;data.lang=C.lang;var b=new URLSearchParams();for(var k in data)b.append(k,data[k]); fetch(C.api,{method:'POST',body:b,credentials:'same-origin',headers:{'X-Requested-With':'fetch'}}).then(function(r){return r.json()}).then(cb).catch(function(){cb({ok:false})})} var prev=get(key);if(prev)mark(prev); box.querySelectorAll('.ce-fb-v').forEach(function(b){b.addEventListener('click',function(){var v=b.getAttribute('data-v');mark(v);set(key,v); post({action:'vote',vote:v},function(d){st.style.color=d.ok?'#15803d':'#b91c1c';st.textContent=d.ok?C.msg.thanks:(d.msg||C.msg.err);if(d.ok)counts(d)})})}); var f=box.querySelector('form');f.addEventListener('submit',function(e){e.preventDefault();var E=f.elements;if(!E.fb_name.value.trim()||!E.message.value.trim()){(E.fb_name.value.trim()?E.message:E.fb_name).focus();return} var btn=f.querySelector('.send');btn.disabled=true; post({action:'review',name:E.fb_name.value,city:E.city.value,learner:E.learner.value,message:E.message.value,website:E.website.value,vote:get(key)||0},function(d){btn.disabled=false; var m=document.createElement('p');m.className='note full';m.style.cssText='font-weight:700;color:'+(d.ok?'#15803d':'#b91c1c');m.textContent=d.ok?C.msg.ok:(d.msg||C.msg.err); var o=f.querySelector('.ce-fb-out');if(o)o.remove();m.classList.add('ce-fb-out');f.appendChild(m);if(d.ok)f.reset()})}); if('IntersectionObserver' in window){var io=new IntersectionObserver(function(es){if(es[0].isIntersecting){load();io.disconnect()}},{rootMargin:'300px'});io.observe(box)}else load(); })(); </script> <section class="cev-strip" aria-label="CodingEasily YouTube"><div><span class="cev-kicker">▶ CodingEasily on YouTube</span><h2>Learn with video lessons in easy Hindi</h2><p>Featured video: RDBMS Part 3 – Class XI Commerce IT</p><a class="cev-sub" href="https://youtube.com/@codingeasily?sub_confirmation=1" target="_blank" rel="noopener">▶ Subscribe – it’s free</a></div><div><style> .cev{position:relative;width:100%;aspect-ratio:16/9;background:#0f172a;border-radius:16px;overflow:hidden;box-shadow:0 10px 26px rgba(15,23,42,.18)} .cev-btn{all:unset;box-sizing:border-box;position:absolute;inset:0;cursor:pointer;display:block} .cev-btn img{width:100%;height:100%;object-fit:cover;display:block;color:transparent;transition:transform .25s} .cev-btn:hover img{transform:scale(1.03)} .cev-btn:focus-visible{outline:3px solid #f97316;outline-offset:-3px} .cev-play{position:absolute;left:50%;top:50%;width:68px;height:48px;transform:translate(-50%,-50%);filter:drop-shadow(0 4px 10px rgba(0,0,0,.35))} .cev-cap{position:absolute;left:0;right:0;bottom:0;padding:22px 14px 10px;background:linear-gradient(transparent,rgba(0,0,0,.72));color:#fff;font:700 .92rem/1.35 system-ui,-apple-system,Segoe UI,Roboto,sans-serif} .cev iframe{position:absolute;inset:0;width:100%;height:100%;border:0} .cev-strip{width:min(1180px,calc(100% - 28px));margin:28px auto 22px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,340px);gap:22px;align-items:center;background:linear-gradient(135deg,#eff6ff,#fff7ed);border:1px solid #dbeafe;border-radius:22px;padding:20px 22px} .cev-strip h2,.cev-lesson h2{margin:0 0 6px;font-size:1.18rem;line-height:1.3;color:#14213d} .cev-strip p,.cev-lesson p{margin:0 0 10px;color:#475569;font-size:.95rem} .cev-kicker{display:inline-block;font:800 .72rem/1 system-ui,sans-serif;letter-spacing:.08em;text-transform:uppercase;color:#dc2626;margin-bottom:8px} .cev-sub{display:inline-flex;align-items:center;gap:6px;background:#dc2626;color:#fff!important;text-decoration:none;font-weight:800;font-size:.88rem;padding:8px 14px;border-radius:999px} .cev-sub:hover{background:#b91c1c} .cev-lesson{width:min(980px,calc(100% - 28px));margin:26px auto;background:#fff;border:1px solid #e2e8f0;border-radius:22px;padding:20px} .cev-lesson .cev{margin-top:12px} @media(max-width:760px){.cev-strip{grid-template-columns:1fr;padding:16px}} @media (prefers-reduced-motion:reduce){.cev-btn img{transition:none}} </style> <script> (function(){ function play(btn){ var box=btn.parentNode, id=box.getAttribute('data-id'), t=box.getAttribute('data-title')||'YouTube video'; var f=document.createElement('iframe'); f.src='https://www.youtube-nocookie.com/embed/'+id+'?autoplay=1&rel=0&modestbranding=1'; f.title=t; f.allow='accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share'; f.setAttribute('allowfullscreen',''); f.referrerPolicy='strict-origin-when-cross-origin'; box.innerHTML=''; box.appendChild(f); f.focus(); } document.addEventListener('click',function(e){ var b=e.target.closest ? e.target.closest('.cev-btn') : null; if(b){ e.preventDefault(); play(b); } }); /* warm up the connection only when someone shows interest (hover/focus) */ var warmed=false; function warm(e){ if(warmed||!e.target.closest||!e.target.closest('.cev-btn')) return; warmed=true; ['https://www.youtube-nocookie.com','https://www.google.com'].forEach(function(u){var l=document.createElement('link');l.rel='preconnect';l.href=u;document.head.appendChild(l);}); } document.addEventListener('pointerover',warm,{passive:true}); document.addEventListener('focusin',warm); })(); </script> <div class="cev" data-id="QToqM1ooF_A" data-title="RDBMS Part 3 – Class XI Commerce IT"><a class="cev-btn" href="https://www.youtube.com/watch?v=QToqM1ooF_A" aria-label="Play video: RDBMS Part 3 – Class XI Commerce IT"><img src="https://i.ytimg.com/vi/QToqM1ooF_A/hqdefault.jpg" width="480" height="360" alt="RDBMS Part 3 – Class XI Commerce IT – video thumbnail" loading="lazy" decoding="async"><svg class="cev-play" viewBox="0 0 68 48" aria-hidden="true"><path d="M66.5 7.7a8.5 8.5 0 0 0-6-6C55.3.3 34 .3 34 .3S12.7.3 7.5 1.7a8.5 8.5 0 0 0-6 6C.1 12.9.1 24 .1 24s0 11.1 1.4 16.3a8.5 8.5 0 0 0 6 6C12.7 47.7 34 47.7 34 47.7s21.3 0 26.5-1.4a8.5 8.5 0 0 0 6-6C67.9 35.1 67.9 24 67.9 24s0-11.1-1.4-16.3z" fill="#f00"/><path d="M45 24 27 14v20z" fill="#fff"/></svg><span class="cev-cap">RDBMS Part 3 – Class XI Commerce IT</span></a></div></div></section><aside class="ut-band" aria-label="UpyogiTools.in"> <a class="ut-rib" href="https://upyogitools.in/" target="_blank" rel="noopener"> <span class="ut-ic" aria-hidden="true">🧰</span> <span class="ut-txt"><span class="ut-new">FREE</span><b>UpyogiTools.in</b> — 40+ PDF & photo tools <small>Exam photo resize, merge & compress PDF · no signup · files stay on your device</small></span> <span class="ut-chips" aria-hidden="true"><span class="ut-chip">📸 Exam Photo Kit</span><span class="ut-chip">🗜️ Compress PDF</span></span> <span class="ut-go">Try free →</span> </a> </aside> <footer class="site-footer"> <div class="footer-inner"> <div class="footer-brand"> <a href="/" class="logo footer-logo"> <img src="/assets/img/logo-full.webp" width="150" height="128" alt="CodingEasily – Learn, Practice, Grow" loading="lazy" decoding="async"> </a> <p class="english-content">Programming tutorials in Hindi and English. Learn with simple examples, output, practice and projects.</p> <p class="hindi-content">Hindi और English में programming tutorials। Simple examples, output, practice और projects के साथ सीखें।</p> </div> <div class="footer-links"> <div> <h4>Tutorials</h4> <a href="/tutorial/c/">C Language</a> <a href="/tutorial/php/">PHP</a> <a href="/tutorial/mysql/">MySQL + DBMS + RDBMS</a> <a href="/tutorial/python/">Python + DS + ML + AI</a> <a href="/tutorial/java/">Java</a> <a href="/tutorial/cpp/">C++ Complete</a> <a href="/tutorial/nextjs/">Next.js</a> <a href="/tutorial/android/">Android (Kotlin)</a> <a href="/tutorial/android-ecommerce/">E-commerce App</a> <a href="/tutorial/class-11-cs/">Class 11 CS</a><a href="/tutorial/class-11-ip/">Class 11 IP</a><a href="/tutorial/class-12-cs/">Class 12 CS</a><a href="/tutorial/class-12-ip/">Class 12 IP</a> <a href="/tutorial/data-science/">Data Science (60 Days)</a><a href="/tutorial/html/">HTML (15 Days)</a><a href="/tutorial/css/">CSS (20 Days)</a><a href="/tutorial/javascript/">JavaScript (30 Days)</a><a href="/tutorial/tally-prime/">Tally Prime + Accounting (30 Days)</a><a href="/tutorial/seo/">SEO in 10 Days</a> <a href="/tutorial/digital-tips/">Digital Tips</a> <a href="/programs/">Simple Programs Lab</a> <a href="/tutorial/cyber-security/">Cyber Safety India</a> </div> <div> <h4>Important Links</h4> <a href="/about/">About</a> <a href="/contact/">Contact</a> <a href="/privacy-policy/">Privacy Policy</a> <a href="/disclaimer/">Disclaimer</a> <a href="/terms/">Terms of Use</a> <a href="/editorial-policy/">Editorial Policy</a> <a href="/author/">Author / Review Info</a> <a href="/sitemap.xml">XML Sitemap</a> <a href="https://fileimagecalhelp.codingeasily.in/" rel="noopener">Free Image & PDF Tools</a> <a href="https://upyogitools.in/" target="_blank" rel="noopener" title="Free Online Utility Tools">UpyogiTools — Free Online Tools</a> </div> <div> <h4>For Students</h4> <a href="/tutorial/c/introduction/">Start C Language</a> <a href="/tutorial/c/c-programs-50/">50 C Programs</a> <a href="/tutorial/c/c-quiz/">C MCQ Quiz</a> <a href="/tutorial/python/python-introduction/">Start Python + AI</a> <a href="/tutorial/python/python-quiz/">Python + AI Quiz</a> <a href="/learning-roadmap/">Learning Roadmap</a> <a href="/notes/class-10-it-402/">Class X IT (402) Notes</a> <a href="/notes/">All CBSE Notes</a> <a href="/blog/">Programming Blog</a> <a href="/download/">Free Downloads</a> </div> </div> </div> <div class="footer-community"> <div class="fc-inner"> <div class="fc-text"> <strong class="english-content">Join the CodingEasily community</strong> <strong class="hindi-content">CodingEasily community से जुड़िए</strong> <span class="english-content">Get new tutorials, notes and exam tips — free. Follow us everywhere:</span> <span class="hindi-content">नए tutorials, notes और exam tips पाइए — बिल्कुल मुफ़्त। हमें हर जगह follow कीजिए:</span> </div> <div class="fc-actions"> <a class="fc-btn fc-yt" href="https://youtube.com/@codingeasily" target="_blank" rel="noopener nofollow" aria-label="Subscribe to CodingEasily on YouTube" title="YouTube"> <svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M23 7.1a3 3 0 0 0-2.1-2.1C19 4.5 12 4.5 12 4.5s-7 0-8.9.5A3 3 0 0 0 1 7.1 31 31 0 0 0 .5 12 31 31 0 0 0 1 16.9 3 3 0 0 0 3.1 19c1.9.5 8.9.5 8.9.5s7 0 8.9-.5a3 3 0 0 0 2.1-2.1 31 31 0 0 0 .5-4.9 31 31 0 0 0-.5-4.9zM9.8 15.3V8.7l5.7 3.3z"/></svg> <span>YouTube</span></a> <a class="fc-btn fc-fb" href="https://facebook.com/codingeasily" target="_blank" rel="noopener nofollow" aria-label="Follow CodingEasily on Facebook" title="Facebook"> <svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M22 12a10 10 0 1 0-11.6 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.4v7A10 10 0 0 0 22 12z"/></svg> <span>Facebook</span></a> <a class="fc-btn fc-ig" href="https://instagram.com/codingeasily" target="_blank" rel="noopener nofollow" aria-label="Follow CodingEasily on Instagram" title="Instagram"> <svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M12 2.2c3.2 0 3.6 0 4.9.1 1.2.1 1.8.3 2.2.4.6.2 1 .5 1.4.9.4.4.7.8.9 1.4.2.4.4 1 .4 2.2.1 1.3.1 1.7.1 4.9s0 3.6-.1 4.9c-.1 1.2-.3 1.8-.4 2.2-.2.6-.5 1-.9 1.4-.4.4-.8.7-1.4.9-.4.2-1 .4-2.2.4-1.3.1-1.7.1-4.9.1s-3.6 0-4.9-.1c-1.2-.1-1.8-.3-2.2-.4-.6-.2-1-.5-1.4-.9-.4-.4-.7-.8-.9-1.4-.2-.4-.4-1-.4-2.2C2.2 15.6 2.2 15.2 2.2 12s0-3.6.1-4.9c.1-1.2.3-1.8.4-2.2.2-.6.5-1 .9-1.4.4-.4.8-.7 1.4-.9.4-.2 1-.4 2.2-.4C8.4 2.2 8.8 2.2 12 2.2zm0 1.8c-3.1 0-3.5 0-4.7.1-1.1.1-1.7.2-2.1.4-.5.2-.9.4-1.3.8-.4.4-.6.8-.8 1.3-.2.4-.3 1-.4 2.1-.1 1.2-.1 1.6-.1 4.7s0 3.5.1 4.7c.1 1.1.2 1.7.4 2.1.2.5.4.9.8 1.3.4.4.8.6 1.3.8.4.2 1 .3 2.1.4 1.2.1 1.6.1 4.7.1s3.5 0 4.7-.1c1.1-.1 1.7-.2 2.1-.4.5-.2.9-.4 1.3-.8.4-.4.6-.8.8-1.3.2-.4.3-1 .4-2.1.1-1.2.1-1.6.1-4.7s0-3.5-.1-4.7c-.1-1.1-.2-1.7-.4-2.1-.2-.5-.4-.9-.8-1.3-.4-.4-.8-.6-1.3-.8-.4-.2-1-.3-2.1-.4-1.2-.1-1.6-.1-4.7-.1zm0 3.1a4.9 4.9 0 1 1 0 9.8 4.9 4.9 0 0 1 0-9.8zm0 8a3.1 3.1 0 1 0 0-6.2 3.1 3.1 0 0 0 0 6.2zm6.3-8.2a1.1 1.1 0 1 1-2.3 0 1.1 1.1 0 0 1 2.3 0z"/></svg> <span>Instagram</span></a> </div> </div> </div> <div class="footer-note english-content">All trademarks, logos, brand names, product names and service names belong to their respective owners and are used only for educational and reference purposes.</div> <div class="footer-note hindi-content">सभी trademarks, logos, brand names, product names और service names उनके संबंधित मालिकों की संपत्ति हैं और केवल educational तथा reference purpose के लिए उपयोग किए गए हैं।</div> <div class="footer-bottom">© 2026 CodingEasily.in · All rights reserved · Made for learners in India</div> </footer> <script> /* Remember Hindi/English choice across all tutorial pages */ (function () { var KEY = 'ce_lang'; function getPref() { try { return localStorage.getItem(KEY); } catch (e) { return null; } } function setPref(v) { try { localStorage.setItem(KEY, v); } catch (e) {} } var url = new URL(window.location.href); var urlLang = url.searchParams.get('lang'); var hasSwitch = document.querySelector('.lsi-btn[data-lang]'); if (urlLang === 'hi') { setPref('hi'); } else if (hasSwitch && getPref() === 'hi' && document.referrer.indexOf(location.host) !== -1) { url.searchParams.set('lang', 'hi'); window.location.replace(url.toString()); return; } document.addEventListener('click', function (e) { var b = e.target.closest ? e.target.closest('.lsi-btn[data-lang]') : null; if (b) setPref(b.getAttribute('data-lang') === 'hi' ? 'hi' : 'en'); }, true); if (urlLang === 'hi') { var links = document.querySelectorAll('a[href^="/tutorial/"]'); for (var i = 0; i < links.length; i++) { var a = links[i], h = a.getAttribute('href'); if (h.indexOf('lang=') !== -1 || h.indexOf('#') === 0) continue; var hash = '', k = h.indexOf('#'); if (k !== -1) { hash = h.slice(k); h = h.slice(0, k); } a.setAttribute('href', h + (h.indexOf('?') === -1 ? '?' : '&') + 'lang=hi' + hash); } } })(); </script> <script defer src="/assets/js/main.js?v=4.1"></script> <script defer src="/assets/js/ce-program-pack.js?v=1"></script> <script defer src="/assets/js/ce-chatbot.js?v=9"></script> </body> </html>