ํ”„๋กœ์ ํŠธ

[React] SEO, ์›น ์ ‘๊ทผ์„ฑ ๊ฐœ์„ ํ•˜๊ธฐ

Yuuuki 2024. 7. 19. 09:53

CSR์˜ ๋Œ€ํ‘œ์ ์ธ ๋‹จ์  ์ค‘ ํ•˜๋‚˜์ธ ์ทจ์•ฝํ•œ SEO ์ ์ˆ˜์™€ ๋ชจ๋“ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์›น ์ ‘๊ทผ์„ฑ ๊ฐœ์„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•œ๋‹ค.

 

 
 
 
์›น ์ ‘๊ทผ์„ฑ๊ณผ SEO์„ ๊ฐœ์„ ํ•˜๊ธฐ ์ด์ „์˜ ์ ์ˆ˜์ด๋‹ค.
์ ‘๊ทผ์„ฑ์€ ํŽ˜์ด์ง€ ๋งˆ๋‹ค ์ƒ์ดํ•˜์ง€๋งŒ, ๊ฐ€์žฅ ๋‚ฎ์€ ๋ฉ”์ธํŽ˜์ด์ง€์˜ ์ ์ˆ˜๊ฐ€ 69์ , SEO ์ ์ˆ˜๋Š” 83์ ์„ ๊ธฐ๋กํ•˜์˜€๋‹ค.

 

SEO : ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”


๐Ÿ” React์˜ SEO

๋ฆฌ์•กํŠธ์™€ ๊ฐ™์€ SPA๋Š” SSR๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ์ดˆ๊ธฐ์— HTML์ด ์ตœ์†Œํ•œ์˜ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ์ฝ˜ํ…์ธ ๋Š” JS๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ Œ๋”๋ง์ด ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ชจ๋“  ํฌ๋กค๋Ÿฌ๊ฐ€ ์•„๋‹Œ ๋งŽ์€ ํฌ๋กค๋Ÿฌ๋“ค์ด JS๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.(๊ตฌ๊ธ€๋ด‡์€ JS๋ฅผ ์ง€์›ํ•ด์„œ SEO๊ฐ€ ๋‚˜์˜์ง€ ์•Š๋‹ค๊ณ  ํ•จ)

Next.js๋ฅผ ์ด์šฉํ•œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ณ„๋‹ค๋ฅธ ์ž‘์—…์„ ํ•˜์ง€ ์•Š์•„๋„, SEO ์ ์ˆ˜๊ฐ€ 100์ ์ด ๋‚˜์™”์ง€๋งŒ, ๋ฆฌ์•กํŠธ๋Š” ์—ญ์‹œ ๊ฐœ์„ ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•ด๋‚˜๋ฉด ๋ ๊นŒ?

 

โœจ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. meta ํƒœ๊ทธ ๊ด€๋ฆฌ

2. Robots.txt

3. Sitemap ์ƒ์„ฑ

 

 

React-Helmet

import { Helmet } from "react-helmet-async";

interface SEOMetaTagProps {
  title?: string;
  description: string;
  keywords?: string;
  imgsrc?: string;
  url: string;
}

function SEOMetaTag({
  title = "๋ฉ๋ƒฅ์ƒํ™œ | ๋ฐ˜๋ ค๋™๋ฌผ ์ปค๋ฎค๋‹ˆํ‹ฐ",
  description,
  keywords,
  imgsrc = "https://tools.bemypet.kr/static/media/regist_samsek_lili.6a0e7afd4dac533b2c07.png",
  url = "https://dev-meongnyang-life.vercel.app",
}: SEOMetaTagProps) {
  return (
    <Helmet>
      <title>{title}</title>
      <meta name="description" content={description} data-react-helmet="true" />
      <meta name="keywords" content={keywords} />
      <meta property="og:type" content="website" />
      <meta property="og:title" content={title} />
      <meta property="og:site_name" content={title} />
      <meta property="og:description" content={description} />
      <meta property="og:image" content={imgsrc} />
      <meta property="og:url" content={url} />
      <meta name="twitter:title" content={title} />
      <meta name="twitter:description" content={description} />
      <meta name="twitter:image" content={imgsrc} />
      <link rel="canonical" href={url} />
    </Helmet>
  );
}

export default SEOMetaTag;

SEOMetaTag์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค ์ง€์ •ํ•ด์ฃผ์—ˆ๋‹ค.

 

robots.txt

๊ฒ€์ƒ‰ ์—”์ง„ ํฌ๋กค๋Ÿฌ์—๊ฒŒ ์‚ฌ์ดํŠธ์˜ ํŠน์ • ๋ถ€๋ถ„์„ ํฌ๋กค๋งํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ์ธ๋ฑ์‹ฑํ•˜์ง€ ์•Š๋„๋ก ์ง€์‹œํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ๊ฐœ์ธ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ๊ฐœ์ธํ™” ํŽ˜์ด์ง€๋Š” ์ œ์™ธํ•˜์—ฌ, ๊ฒ€์ƒ‰์—”์ง„์— ์ธ๋ฑ์‹ฑ ๋˜์ง€์•Š๋„๋ก ํ•˜์˜€๋‹ค.

 

User-agent: *

Disallow: /signup
Disallow: /find/pw

Disallow: /profiles/create
Disallow: /profiles/update

Disallow: /posts/create
Disallow: /posts/update

Disallow: /likes
Disallow: /bookmarks

Allow: /

Sitemap: https://dev-meongnyang-life.vercel.app/sitemap.xml

 

logInํŽ˜์ด์ง€๋Š” ์„œ๋น„์Šค์˜ indexํŽ˜์ด์ง€ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ œ์™ธํ•˜์˜€์œผ๋ฉฐ, ์œ ์ €ํŽ˜์ด์ง€(profiles/:userId) ๋Š” ์ฃผ๋กœ ์„œ๋น„์Šค ํŠน์„ฑ ์ƒ, ์œ ์ €๊ฐ€ ์•„๋‹Œ ๋ฐ˜๋ ค๋™๋ฌผ์˜ ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์—”์ง„ Allow ํ•˜์˜€๋‹ค

 

 

๐Ÿ‘‰๐Ÿป ๋ถˆํ•„์š”ํ•œ ํŽ˜์ด์ง€๋ฅผ ์ฐจ๋‹จํ•˜์—ฌ, ๊ฒ€์ƒ‰์—”์ง„์˜ ์ž์›์„ ๋” ์ค‘์š”ํ•œ ํŽ˜์ด์ง€์— ํฌ์ปค์Šค ์‹œํ‚ด์œผ๋กœ์จ, SEO ์ตœ์ ํ™”์— ๋„์›€์ด ๋œ๋‹ค.

 

 

Sitemap

https://www.xml-sitemaps.com/

 

Create your Google Sitemap Online - XML Sitemaps Generator

Installable version We offer a server-side script written in PHP language that you can install on your server and create sitemap for your website. The script doesn't have the limit on number of pages included in sitemap, although server resources depend re

www.xml-sitemaps.com

๋Œ€ํ‘œ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” XML-Sitemaps๋ฅผ ํ™œ์šฉํ•ด, ์‚ฌ์ดํŠธ๋งต์„ ์ƒ์„ฑํ•˜์˜€๋‹ค.

 

๐ŸŽ‰ ๋งŒ์ ์œผ๋กœ SEO ์ ์ˆ˜๋ฅผ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

์›น ์ ‘๊ทผ์„ฑ


 

โœจ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. ๋Œ€์ฒด ํ…์ŠคํŠธ ์ œ๊ณต

2. ์‹œ๋งจํ‹ฑํ•œ ํƒœ๊ทธ ์‚ฌ์šฉ

3. label๊ณผ ์„ค๋ช… ์ถ”๊ฐ€

4. ์ƒ‰์ƒ ๋Œ€๋น„ ๊ฐœ์„ 

 

lighthouse ์ธก์ • ๊ฒฐ๊ณผ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋ฒ„ํŠผ๊ณผ ๋งํฌ์— ์ ‘๊ทผ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์ด ์—†๋Š”์ ์„ ๋ณด์™„์ด์˜€๋‹ค.
๐Ÿ‘‰๐Ÿป aria-label ์„ ํ†ตํ•ด, ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๊ฐ€ ์–ด๋–ค ๋ฒ„ํŠผ์„ ์˜๋ฏธํ•˜๋Š”์ง€ ๋ช…์‹œํ•ด์ฃผ์—ˆ๋‹ค.

 

 

 

์ด์™€ ๊ฐ™์ด, ๋ฒ„ํŠผ ์ƒ‰์ƒ์„ ๋ฉ๋ƒฅ์ƒํ™œ์˜ primary color๋กœ ํ†ต์ผํ•˜์˜€๋Š”๋ฐ, ์ด์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ๋ฅผ ์ฃผ๊ณ  ์žˆ๋‹ค. WCAG ๊ฐ€์ด๋“œ๋ผ์ธ์— ๋”ฐ๋ฅด๋ฉด, ํ…์ŠคํŠธ์™€ ๋ฐฐ๊ฒฝ์‚ฌ์ด์˜ ์ƒ‰์ƒ ๋Œ€๋น„๋กœ ๊ฐ€๋…์„ฑ์„ ๊ฐœ์„ ํ•ด์•ผํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.
 
์ƒ‰์ƒ์„ ๋ฐ”๊พธ๊ธฐ์—” ์–ด๋ ค์›€์ด ์žˆ๊ธฐ์—, shadow๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š”๋ฐฉ๋ฒ•์œผ๋กœ ์กฐ๊ธˆ ๋ณด์™„์„ ํ•ด๋ณด์•˜๋‹ค.
 
๐Ÿ‘‰๐Ÿป ํ•˜์ง€๋งŒ, ์—ฌ์ „ํžˆ ๊ฒฝ๊ณ ๊ฐ€ ๋œจ๊ธดํ•œ๋‹ค...
 

 

 

๐ŸŽ‰ ์ ‘๊ทผ์„ฑ ์ ์ˆ˜๊ฐ€ 69์ →95์ ์œผ๋กœ, ์•ฝ 37% ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ์—ˆ๋‹ค.