SEO in Next.js 14 - The Ultimate Guide (Metadata, Sitemap, Robots, Google Search Console, Caching)

Sdílet
Vložit
  • čas přidán 5. 06. 2024
  • In this tutorial, you will learn everything you need to know about SEO (search engine optimization) in Next.js and the app router.
    Project files:
    Starting code: github.com/codinginflow/nextj...
    opengraph-image: github.com/codinginflow/nextj...
    ⭐ Get my full-stack Next.js with Express & TypeScript course: codinginflow.com/nextjs
    ✅ Get my free React Best Practices course: www.codinginflow.com/reactbes...
    💌 Join my newsletter for regular web dev tips: codinginflow.com/newsletter
    💬 Join our developer community on Discord: codinginflow.com/discord
    📣 Follow Coding in Flow on social media:
    Twitter: / codinginflow
    Instagram: / codinginflow
    TikTok: / codinginflow
    Facebook: / codinginflow
    Timestamps:
    0:00 - Intro & prerequisites
    2:28 - Static metadata, title template, favicon, opengraph-image, next/Font, next/Image
    18:24 - Dynamic metadata (generateMetadata), React cache
    28:38 - Static rendering & caching, generateStaticParams, notFound
    40:48 - Server components (SSR) vs client components (CSR)
    43:35 - Dynamic sitemap (sitemap.ts)
    50:42 - Robots.txt & robots meta tag
    55:59 - Google Search Console & Vercel Analytics connection

Komentáře • 160

  • @benb1987
    @benb1987 Před 5 měsíci +22

    Brilliant guide, probably the most informative and clearly explained youtube video I have watched. Great work!

  • @asappi3110
    @asappi3110 Před 6 měsíci +3

    Awesome guide! I'm a big fan of the way you show examples of everything. Thanks a lot!

  • @JosephOpio
    @JosephOpio Před 2 měsíci +1

    One of the best SEO videos you can ever watch. Don't skip any steps. I have watched this over and over and over and still can't get enough of it.

    • @codinginflow
      @codinginflow  Před 2 měsíci +1

      Glad you liked it!

    • @JosephOpio
      @JosephOpio Před měsícem

      @@codinginflow Can you please make a video on the Opengraph image generator?

  • @sammy3362
    @sammy3362 Před 5 měsíci +2

    Absolutely loved this! Very insightful

    • @codinginflow
      @codinginflow  Před 5 měsíci +1

      Thanks a lot! Very happy to hear that!

  • @user-uv6ow1db9z
    @user-uv6ow1db9z Před 2 měsíci

    Thank you for such easy to follow and in depth tutorial

  • @codingwithlucy
    @codingwithlucy Před měsícem

    Your explanation is so clear, thank you!

  • @riscode
    @riscode Před měsícem +1

    I was hooked like I was watching a blockbuster 😂 Learning many things without getting overwhelmed. Really great video!

  • @HousseynBelhadja
    @HousseynBelhadja Před měsícem +1

    This video on SEO is truly exceptional - a must-watch! Each step is crucial, so make sure not to miss any. I've revisited it countless times and still find it incredibly valuable.

  • @sirbacharach1
    @sirbacharach1 Před měsícem

    What a fantastic video, I've been struggling with SEO with React and Next.js as I'm new to web development, but this video has been such a great help, even the icon and the opengraph image has been helpful

  • @aminahb4307
    @aminahb4307 Před měsícem

    Absolutely fantastic walk through! Thank you!

  • @Leesdjo
    @Leesdjo Před 4 měsíci

    Thank you so much for the detailed video. This video deserves more than just a like and a subscription.

  • @pamphilemkp
    @pamphilemkp Před 4 měsíci +1

    Thank you for this amazing tutorial, you deserve my subscription I hope many more people find this channel, I have been trying to understand how to add the metadata in nextjs, I have read the official doc and watch a couple of videos on some channels I could not find any relevant content like, thank you for the hard work for the dev community I am so happy because I have been able to solve many issues after watching this tutorial and also understand may SEO concepts. keep up the good work.

    • @codinginflow
      @codinginflow  Před 4 měsíci

      Thank you for the kind words 😊 Glad you liked it

  • @pitsonborellio7463
    @pitsonborellio7463 Před měsícem

    Awesome video, very detailed with lot of useful tips. Thank you very much !

  • @ivandamyanov
    @ivandamyanov Před měsícem

    All I needed thank you!

  • @TheLarynx
    @TheLarynx Před 2 měsíci

    Amazing work, very well delivered. Thank you!

  • @asifkhan-rb8tl
    @asifkhan-rb8tl Před 3 měsíci

    good explained in less time thank bro

  • @kamrant8915
    @kamrant8915 Před 13 dny

    Great tutorial. Thank you very much. Really appreciate it.

  • @Ethan_404
    @Ethan_404 Před 5 měsíci

    Thank you so much for the new advanced knowledge and resources. 😍😍

  • @mohammadDeveloper2431
    @mohammadDeveloper2431 Před 6 měsíci

    This knowledge every developer needed thank you so much for this tutorial please more video like this new features in next js

  • @kousseilameniche6246
    @kousseilameniche6246 Před 5 měsíci

    Thank you! you really helped me a lot! keep up the good work

  • @panwar9848
    @panwar9848 Před měsícem

    Really well made video. Thanks keep making such videos

  • @juanspada4852
    @juanspada4852 Před 14 dny

    Thanks for your content!

  • @usamecoban2582
    @usamecoban2582 Před měsícem

    Thanks for the guide !!

  • @realstoman
    @realstoman Před 3 měsíci

    Super useful tutorial 👍

  • @mahammedsarfaraznawazpagal5018

    Thank you so much for uploading 🎉 Subscribed right away.

  • @leopolddelassence5224

    thanks man, great video

  • @matheusgwg
    @matheusgwg Před 2 měsíci

    youre incredible, thank you so much!

  • @Marc-fj3kd
    @Marc-fj3kd Před 2 měsíci

    Excellent video, thank you!

  • @soniclasses7841
    @soniclasses7841 Před 16 dny

    First time i saw ur channel with this video.
    And i can say amazing knowledge on seo u have
    Want some more tutorials based on nextjs with typescript seo advance 😊

  • @RAJUSARKAR-zo7om
    @RAJUSARKAR-zo7om Před 6 měsíci

    That's great!! Thank you

  • @tareksellami7346
    @tareksellami7346 Před 28 dny

    The best mentor ever. I followed you when you were doing Android and you helped me get my first job. Now I am learning Next.js and you making it easy for me again. I cant thank you enough for your wonderful videos ❤. You are better than GPT 😂. You are literally answering all the questions that cross my mind. Gooold

  • @tiavina-mika
    @tiavina-mika Před 2 měsíci

    Very useful video, thanks

  • @alvin3171997
    @alvin3171997 Před 5 měsíci +1

    Supern tutorial!
    All things SEO related are answered.

    • @codinginflow
      @codinginflow  Před 5 měsíci

      Glad you liked it 👌

    • @alvin3171997
      @alvin3171997 Před 5 měsíci

      @@codinginflow I think one thing that is not covered is scheme markup for each dynamic product pages

  • @BBocho
    @BBocho Před 4 měsíci

    Thank you very much!

  • @preisner528
    @preisner528 Před 4 měsíci

    thank you!

  • @paschalkings8184
    @paschalkings8184 Před 3 měsíci

    this is awesome.

  • @sulaimandev
    @sulaimandev Před 3 měsíci

    Thank you :)

  • @veggtips.shorts
    @veggtips.shorts Před měsícem

    just amazing content, new subscriber and will keep watching your videos!

  • @RFbcc
    @RFbcc Před 6 měsíci

    Wow a new t-shirt and a wireless earpiece 😀,
    Great video as always , Arigato my sensei !

  • @canra245
    @canra245 Před 3 měsíci

    thank you🙏

  • @MichaelShingo
    @MichaelShingo Před 2 měsíci

    thank you this is a goldmine of info

  • @radshodam
    @radshodam Před 4 měsíci

    great tutorial 🍻

  • @CharlesAE
    @CharlesAE Před 4 měsíci +1

    Very in depth vid , could you do one on integrating Google AdSense into Next14?

  • @lightoflifegames7227
    @lightoflifegames7227 Před 3 měsíci

    thank you very muchm very useful and enjoyed watching

  • @monahewidy3748
    @monahewidy3748 Před 4 měsíci

    thank you

  • @athardavid
    @athardavid Před 4 měsíci

    Beautiful

  • @ChusenOne
    @ChusenOne Před měsícem

    Great video! Helped me a lot improving the SEO for a project I was working on.
    One quesion though: I found that vercel's analytics tool gets blocked by most adblockers and on their documentation doesn't mention much or anything about it. Do you know a work around this?

  • @davidlintin
    @davidlintin Před 2 měsíci

    Great tutorial!! So much info. One question. How would we create a site map with internationalization also how to generate the seo metadata based on the lang param ? ✌🏻

  • @tejasyoutuber
    @tejasyoutuber Před 5 měsíci

    Do you know how to resolve the data dump in the content type of text/x-component on the UI. I am using aws cloud front as cdn

  • @albertoenriquez2440
    @albertoenriquez2440 Před 4 měsíci

    This is what I was looking for. Thanks. I still have an error in GSC that says "page with redirect", but I think its a google thing more than my code...

  • @hbela1000
    @hbela1000 Před 6 měsíci

    outstanding,thx.

  • @TikTokTrendsCompilation
    @TikTokTrendsCompilation Před 6 měsíci +1

    Just what i needed to learn, great tutorial! thank you

  • @lmlTimolml
    @lmlTimolml Před 29 dny

    Hey! Great stuff! One question though, I have a project that uses next-intl to serve different locales, how can I pass the locale variable to the dynamically generated sitemap so it will take into account which locale to map?

  • @avigdev
    @avigdev Před 3 měsíci

    greet. i loved it

  • @ITRebels
    @ITRebels Před měsícem

    awesome

  • @aymenbachiri-yh2hd
    @aymenbachiri-yh2hd Před 15 dny

    THank You

  • @SMarGwanS
    @SMarGwanS Před měsícem

    Hey, thank you for anamazing video.
    I wanted to ask in case I have [locale] folder, where should my sitemap file go and how should it look to support different locales?

  • @maxilkiv
    @maxilkiv Před 6 měsíci

    15:11 - I think there's a feature in VS Code which allows you to forward localhost, it's called port forwarding

    • @codinginflow
      @codinginflow  Před 6 měsíci +2

      Right, I forgot about this. I think it's new.

  • @EmanuelCovelli
    @EmanuelCovelli Před měsícem

    Hello do you know why con cloudflare pages on dynamic routes I have to use export const runtime = 'edge'; so even if I use generateStaticParams the pages will be note served with SSG but dynamically ? Thanks very much for this video!

  • @ElijahScott10x
    @ElijahScott10x Před 4 měsíci

    This video is a Godsend. The docs sucks compare to your video. I appreciate it.

  • @sohrabkhan101
    @sohrabkhan101 Před 5 měsíci +1

    I have encountered an issue where my Open Graph images are no longer appearing when I share my page. Interestingly when I view source in chrome, the images are present in the HTML code. After spending few hours I realize that open graph image is not public. Do you know how do i fix this

  • @asifuzzamanbappy1297
    @asifuzzamanbappy1297 Před 4 měsíci

    another question, if i may.... can i use disallow props in robots.ts file with some wild cards in them?(i.e. disallow: ["/author/*/list", "/groups/name/*"])
    thanks and happy coding :)

  • @apitelrgramapitry7609
    @apitelrgramapitry7609 Před 25 dny

    Thanks for this awesome guide. and how to make sitelink on google search?

  • @maker._
    @maker._ Před měsícem

    I liked this video so much I clicked on its ads

  • @AliEbadi-99
    @AliEbadi-99 Před 5 měsíci

    thank u

  • @yusuftezel9273
    @yusuftezel9273 Před měsícem

    Nice video, thanks a lot. Is keyword not important, i am just newbie for SEO and want to know if there is anything that is not mentioned in this video (the first thing that comes in my mind is keywords). Again thanks for this video.

  • @ste9890
    @ste9890 Před 3 měsíci

    Excellent run-through, thanks for this! The tip to convert the blog post to SSG is great, but my blog index is also dynamic at the moment - I think because I'm using search params for pagination. Is there a way I can make the index (or at least the first page) static as well?

    • @codinginflow
      @codinginflow  Před 3 měsíci

      I think it's fine for this section to be dynamic because it doesn't show up much in Google.
      However, you can move your page number into a URL path param ("/blog/1") and this way cache them too.

    • @ste9890
      @ste9890 Před 3 měsíci

      @@codinginflow Thanks for the quick response, appreciate it!

  • @ashfaquemamdu4582
    @ashfaquemamdu4582 Před měsícem

    This has helped me a lot. i have one doubt regarding sitemap generation. for one of our project we are using next js 14 app router and currently our site is completely static we are using export to build to static site. I am not able to generate dynamic sitemaps can any one help me with this or provide some resources which will help me . that will be a great help thanks

  • @younesessaadani9303
    @younesessaadani9303 Před měsícem

    Great video, I have one question if i'm using vercel with the free domain that vercel provide.
    How can i verify the domain when using google search

    • @codinginflow
      @codinginflow  Před měsícem

      I think you can't because you don't have access to the DNS settings

    • @younesessaadani9303
      @younesessaadani9303 Před měsícem

      @@codinginflow Yeah that's one, thank you ❤️

  •  Před 4 měsíci

    Thanks so much for that video. It has clarified me a bunch of things. 🙂
    May I ask one question? If I fetch data from a server component and I need to render it in a deep nested component how I would do that?
    If I place the data in the Context API (use client) I lose all the server features but I also do not want to drill it down so many levels.
    Thanks in advance. 🙏🏻

    • @codinginflow
      @codinginflow  Před 4 měsíci +1

      I would fetch it in the lowest server component and then just pass it as a prop

    •  Před 4 měsíci +1

      @@codinginflow I really appreciate your insight. 🏆So as I suspected either or another, not a third choice then.
      Your approach makes sense since passing props down is better than losing the SSR feature. 🥇🔥

    • @codinginflow
      @codinginflow  Před 4 měsíci +1

      ​@ Yea I think that's the right way

  • @RFbcc
    @RFbcc Před 5 měsíci

    Hi Florian , why is it that the previous notes ai tutorial and the ecommerce tutorial after running "npm run build" all the pages are shown with lambda as dynamically rendered ?
    Thanks !

    • @codinginflow
      @codinginflow  Před 5 měsíci

      In both cases, it's because of authentication. We get the current user server-side on each page which requires dynamic rendering.
      In the notes app, we don't care about static rendering because we don't have any public pages.
      In the e-commerce app, static rendering for product pages would be great. But I think this would require us to handle auth client-side.

    • @RFbcc
      @RFbcc Před 5 měsíci

      @@codinginflow thanks for the clarification, I was going through your tutorial right at this moment :)

  • @HigherStudyAspirant
    @HigherStudyAspirant Před 3 měsíci

    Thank you , I have a page where list of products are shown. I am getting SEO related data from API, the main page has SEO like title, author, but in addition, for each product, they have separate SEO, so how can I return those in generateMetadata as it has only one return and I am already returning the page SEO (i-e title, author), but how to return list for each product where product related SEO is keyword, description, etc

    • @codinginflow
      @codinginflow  Před 3 měsíci

      You do that on he product details page

    • @HigherStudyAspirant
      @HigherStudyAspirant Před 3 měsíci

      thanks, but I also want to do SEO of each product on main page instead of product-detail page, is there any way @@codinginflow

  • @harveyezihe
    @harveyezihe Před 4 měsíci

    i'm not sure if it's just me, but the form to subscribe to the newsletter doesn't show up on chrome, but it did on edge. Maybe it's one of my numerous addons mistakenly blocking it perhaps.

    • @codinginflow
      @codinginflow  Před 4 měsíci

      Thanks for letting me know. The form is loaded from a third-party provider so I guess something in your browser is blocking it.

  • @Beast80K
    @Beast80K Před 2 měsíci

    *Respected Sir,* I'm experiencing a weird problem with API route handlers, my API route gets data from external API (locally hosted using mockoon tool), I'm using *{ next: { revalidate: 60} }* to get fresh data after 60 seconds & also *'force-dynamic'* to prevent it from becoming static during build. External API returns errors like 404, 429, 503 but API route handler responds with cached data & never returns a error, even other errors caught in catch block are ignored. Any suggestions ?

  • @asifuzzamanbappy1297
    @asifuzzamanbappy1297 Před 4 měsíci

    hello, awesome content, really appreciated it, a question, if i may......... how about if we have to fetch data from "internal api" (i.e. localhost:3000/api) endpoints, during "npm run build" it seems to throw error saying "fetch failed" is there any work around it? thanks and happy coding :)

    • @codinginflow
      @codinginflow  Před 4 měsíci +1

      Don't fetch from a route handler in your server components. You can access the DB directly.

    • @asifuzzamanbappy1297
      @asifuzzamanbappy1297 Před 4 měsíci

      thanks a lot :) , thats exactly what i did, just wanted to be sure if thats correct way of doing it or not, much appreciated ♥ @@codinginflow

  • @nathanodonnell2409
    @nathanodonnell2409 Před měsícem

    How do you deal with too many results? I have a listing page with 100k listings, sitemaps are limited to 50k or so

  • @knuseski
    @knuseski Před 3 měsíci

    About caching: What if the content changes? Will 31st know that there is new content and invalidate the cache, or it will render outdated data ?

    • @codinginflow
      @codinginflow  Před 3 měsíci +1

      Either build the project again or look into incremental static regeneration

  • @parthibanramachandran2878
    @parthibanramachandran2878 Před 3 měsíci

    I can't export out folder my nextjs 14 application with nextauth, If have faced this issue please hepl me

  • @szerkan778
    @szerkan778 Před 4 dny

    So If I have for example 300 elements and I am searching by Id I should generateStaticParams?

    • @szerkan778
      @szerkan778 Před 4 dny

      Okey you said in 37 min about that, but what do you recommend if the app has at least 300 records.
      What should I do? 🙄

  • @kualta
    @kualta Před 3 měsíci

    thank you sweetheart

  • @mihirsharma3857
    @mihirsharma3857 Před 6 měsíci

    How to add script tag in head tag?
    Can you please help me.
    Thanks in advance.

    • @codinginflow
      @codinginflow  Před 6 měsíci

      With next/Script.
      You use it with an uppercase S:

  • @canra245
    @canra245 Před 3 měsíci

    i really confuse, how to verify the DNS google search console in vercel :/

  • @iammtw
    @iammtw Před 3 měsíci

    Can you please add the microdata in next js?

  • @user-jf6co4ph4i
    @user-jf6co4ph4i Před 6 měsíci

    please make a detailed video on API creation using NEXT Js

    • @codinginflow
      @codinginflow  Před 6 měsíci

      What exactly do you want to learn?

    • @user-jf6co4ph4i
      @user-jf6co4ph4i Před 6 měsíci

      @@codinginflow I dont want to learn express and other stuff, i just want to learn API creations and JWT etc using NEXT JS Only, Please make a detailed video on this, Hope this is Your Next Video🙏🙏

  • @turjoysaha4991
    @turjoysaha4991 Před 4 měsíci

    Google not accepting sitemap. What to do?

  • @LeAmbrosioFiadone
    @LeAmbrosioFiadone Před 6 měsíci

    Hola Amigo

  • @Moonday475
    @Moonday475 Před 6 měsíci

    I've been following you for a long time.
    I hope you talk about Gaza you are famous and your voice is heard

  • @doguarunbayraktar
    @doguarunbayraktar Před měsícem

    Beautiful tutorial, but I don’t think you have mentioned about keywords.

    • @codinginflow
      @codinginflow  Před měsícem

      Keywords are related to the content. This tutorial covers the technical parts.

  • @rishiraj2548
    @rishiraj2548 Před 6 měsíci

    👍🙏

  • @salmaahmed2171
    @salmaahmed2171 Před 4 dny

    the favicon doesn't change

    • @salmaahmed2171
      @salmaahmed2171 Před 4 dny

      oh well, to solve this, just rename the favicon.ico to icon.ico

    • @codinginflow
      @codinginflow  Před 3 dny +1

      I think it's cached. Wait for a bit.

    • @salmaahmed2171
      @salmaahmed2171 Před 3 dny

      @@codinginflow I solved the problem by changing the name of "favicon.ico" to "icon.ico"

  • @Chernov1984
    @Chernov1984 Před 6 měsíci

    +

  • @gofudgeyourselves9024
    @gofudgeyourselves9024 Před 6 měsíci

    WHat's the first word u said? Kodachima? What does it mean?Is it german?

  • @AliEbadi-99
    @AliEbadi-99 Před 5 měsíci

    thank u