SEO
μ€λμ λΈλ‘κ·Έμμ SEOλ₯Ό μν΄μ μνν μμ λ€μ λν΄μ μμλ΄ λλ€.
κ²μ μμ§ μ΅μ ν (SEO)
μ°μ κ²μ μμ§ μ΅μ ν(SEO)λ μΉμ¬μ΄νΈμ νΈλν½μ μ¦κ°μν€κΈ° μν μ λ΅μ λλ€. κ²μ μμ§μμ μμμ λνλλ μΉμ¬μ΄νΈλ λ λ§μ ν΄λ¦μ μ λν κ°λ₯μ±μ΄ λκΈ° λλ¬Έμ, κ²μ μμ§μ λν μ΅μ νλ μ€μν©λλ€. μ΄λ₯Ό μν΄ λ€μν κΈ°μ κ³Ό μ λ΅μ μ¬μ©ν μ μμ΅λλ€. λνμ μΈ SEO μ λ΅μλ,
- μ μ ν ν€μλ μ°κ΅¬ λ° μ¬μ©
- μΉμ¬μ΄νΈμ λ΄λΆ λ§ν¬ ꡬ쑰 κ°μ
- νμ§ λμ μ½ν μΈ μ 곡
- λͺ¨λ°μΌ μΉνμ μΈ μΉμ¬μ΄νΈ λμμΈ
- μλ κ°μ μ μν μΉμ¬μ΄νΈ μ΅μ ν
λ±μ΄ μμ΅λλ€.
SEOλ λΈλ‘κ·ΈλΏ μλλΌ μΉμ¬μ΄νΈμ μ±κ³΅μ μ€μν μν μ νλ€κ³ ν©λλ€. SEO μ λ΅μ ν΅ν΄ μΉμ¬μ΄νΈμ κ²μ μμ§ μμλ₯Ό λμ΄λ λ Έλ ₯μ ν΄λ΄€μ΅λλ€.
Meta νκ·Έλ?
ꡬκΈκ³Ό κ°μ κ²μμμ§μμ κ²μκ²°κ³Ό μλ¨μ λ΄ μ¬μ΄νΈλ₯Ό μλ¨μ νμνκΈ° μν μν μ κ°μ§κ²μ΄ Meta Tagμ λλ€. κ²μ μμ§μ΄ μ²λ¦¬ν μ μλλ‘ λ°μ΄ν°λ₯Ό μ 곡ν΄μ κ²μ ν€μλμ κ΄λ ¨λ λ°μ΄ν°λ₯Ό λμμ€ μ μλλ‘ ν μ μκ³ μ¬μ©μμκ²λ μ΄λ€ μ¬μ΄νΈμΈμ§μ λν΄ μ 보λ₯Ό μ 곡νλλ° ν° μν μ ν©λλ€.
κ·Έλ¦¬κ³ SNS λ΄ λΈλ‘κ·Έ λ§ν¬λ₯Ό μ¬λ¦΄λ μ¬μ§μ΄λ μ€λͺ μ λ΄ μλμ λ§κ² μ 보λ€μ΄ μΆλ ₯λλλ‘ ν μ μμ΅λλ€.
Gatsby. μ¦, React νκ²½μμ Meta νκ·Έλ₯Ό μΆλ ₯νκΈ° μν΄ React-Helmet λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΅ν΄ μ½κ² Meta νκ·Έλ₯Ό μΆκ°ν μ μμμ΅λλ€.
yarn add @types/react-helmet
μ λ npmμ΄ μλ yarnμ μ¬μ©νκΈ°μ μμ κ°μ λͺ λ Ήμ΄λ₯Ό ν°λ―Έλμ μ λ ₯ν΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€μΉνμ΅λλ€. 그리κ³
import React, { FunctionComponent, ReactNode } from 'react'
import styled from '@emotion/styled'
import GlobalStyle from 'components/Common/GlobalStyle'
import Footer from 'components/Common/Footer'
import { Helmet } from 'react-helmet'
type TemplateProps = {
title: string
description: string
url: string
image: string
children: ReactNode
}
const Container = styled.main`
display: flex;
flex-direction: column;
height: 100%;
`
const Template: FunctionComponent<TemplateProps> = function ({
title,
description,
url,
image,
children,
}) {
return (
<Container>
<Helmet>
<title>{title}</title>
<html lang="ko" />
<meta name="description" content={description} />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta httpEquiv="Content-Type" content="text/html;charset=UTF-8" />
<meta property="og:type" content="website" />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:image" content={image} />
<meta property="og:url" content={url} />
<meta property="og:site_name" content={title} />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={image} />
</Helmet>
<GlobalStyle />
{children}
<Footer />
</Container>
)
}
export default Template
μμκ°μ΄ Meta νκ·Έλ₯Ό μμ±νμ΅λλ€.
μ κ° κ°μμμ λ£κΈ°λ‘λ νμμ μΌλ‘ μμ±ν΄μΌ νλ Meta νκ·Έλ€μ΄ μμλλ° λ€μκ³Ό κ°μ΅λλ€.
- Title : νμ΄μ§μ μ λͺ©μ λλ€.
- Description : νμ΄μ§μ μ€λͺ μ λλ€.
- Viewport : λͺ¨λ°μΌ μΉνμ±κ³Ό κ΄λ ¨λ νκ·Έμ λλ€.
- Content Type : λΈλΌμ°μ κ° λ°μ΄ν°λ₯Ό μ΄λ»κ² μ½μμ§μ λν νκ·Έμ λλ€.
- Social Meta Tag : μ¬λ¬ SNSλ₯Ό μν νκ·Έμ
λλ€.
og
,fb
,twitter
λ±μ΄ μμ΅λλ€.
κ·Έ μΈμ μΉ ν¬λ‘€λ¬μ λμ λͺ λ Ήμ μ§μν μ μλ Robots, ν΄λΉ μ¬μ΄νΈμ ν€μλλ₯Ό λνλΌ μ μλ Keywords λ±μ νκ·Έλ μμ΅λλ€.
κ·Έλ¦¬κ³ λ©μΈ νμ΄μ§ μ»΄ν¬λνΈμμ Template μ»΄ν¬λνΈλ‘ λ°μ΄ν°λ₯Ό μ λ¬νκΈ° μν΄ gatsby-config.js
μμ siteMetadata
νλ‘νΌν°λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό 쿼리ν μ μμ΅λλ€.
module.exports = {
siteMetadata: {
title: `μ€λλ μμΌλ‘`,
description: `λ―Έλλ₯Ό μν΄ μ§κΈ μκ°νκ³ , κΈ°λ‘νμ`,
author: `Jae Hyeon`,
siteUrl: `https://tol0608.github.io`,
}, ...}
μ΄λ κ² μ΄ λΈλ‘κ·Έμ SEOλ₯Ό μν΄ κ°λ¨ν λΌμ΄λΈλ¬λ¦¬ λ° config μ€μ μ ν΄λ΄€μ΅λλ€. λ€λ§ μμ§ λΈλ‘κ·Έμ κΈμ΄ λ§μ΄ μμ΄μμΈμ§β¦ μμΈμ μ λͺ¨λ₯΄κ² μ§λ§ λͺ¨λ λΈλ‘κ·Έ ν¬μ€ν μ μμΈμ΄ μμ±λμ§ μμκ² κ°μ΅λλ€. (μλ κ΅¬κΈ μμΉ μ½μμ΄ μ‘°κΈ μλ―Όνλ€κ³ λ£κΈ΄ νκ±°κ°μ΅λλ€.)
μΆν κ΅¬κΈ μμΉ μ½μμ λ±λ‘ λ° νμΈ μμ μ λν΄μλ μ 리ν΄μ ν¬μ€ν νλλ‘ νκ² μ΅λλ€.