검색 엔진은 크롤링 → 인덱싱 → 랭킹 단계를 거쳐 검색 결과를 생성합니다.
요약
검색 엔진은 크롤링으로 데이터를 수집하고, 인덱싱으로 데이터를 분류하며, 랭킹을 통해 사용자가 입력한 검색어에 가장 적합한 결과를 제공하는 시스템입니다.
요약
검색 엔진의 작동 원리를 이해하고, 이를 기반으로 웹사이트를 최적화해 더 많은 사용자에게 도달하는 것이 SEO의 핵심입니다.
요약
SEO는 가시성, 고객 접근성, 비용 효율성의 측면에서 효과적인 디지털 마케팅 전략입니다.
매우 다양한 방법들이 있다. 밑의 것들은 일부!
1. 크롤링 최적화
검색 엔진이 웹사이트를 효율적으로 탐색하도록 돕는 작업.
/sitemap.xml
파일에서 <loc>
태그로 경로 지정.2. 인덱싱 최적화
검색 엔진이 콘텐츠를 제대로 분석하고 데이터베이스에 저장하도록 돕는 작업.
<title>
: 페이지 핵심 주제를 명확히 전달.<meta>
: 페이지에 대한 추가 정보 제공.<article>
, <section>
, <header>
등.3. 랭킹 최적화
검색 결과 상위 노출을 위한 신뢰도와 사용자 경험 개선.
요약
SEO는 크롤링, 인덱싱, 랭킹 단계에서 각각 최적화를 통해 웹사이트의 가시성을 높이고, 검색 엔진에서 상위 노출될 수 있도록 돕는 작업입니다.
Meta 태그란?
웹페이지의 요약 정보를 제공하며, SEO(검색 엔진 최적화), 소셜 미디어 공유, 브라우저 동작 등에 중요한 역할을 합니다.
주요 Meta 태그로 Title, Description, Viewport 등이 있습니다.
주요 메타 태그
a. Meta Title
- 페이지의 제목을 정의.
- 저희들이 흔히 쓰던 <title>내 웹사이트 제목</title>
이 부분이 Meta Title 태그입니다. 다른 메타 태그들처럼 이렇게 쓰이지는 않네요 ㅎㅎ
<title>내 웹사이트 제목</title>
b. Meta Description
- 웹페이지 요약 정보를 제공.
- 구글 검색 결과에서 URL 아래 표시.
<meta name="description" content="귀여운 영재의 팬클럽 사이트입니다.">
c. Meta Keywords (거의 사용되지 않음)
- 과거에 사용되던 키워드 태그. 현재는 SEO에 영향 없음.
<meta name="keywords" content="HTML, 메타 태그, SEO">
d. Robots Meta 태그
- 검색 엔진 크롤러의 동작을 제어.
- EX) 페이지를 인덱싱하지 않고 링크만 크롤링
- index
: 페이지를 인덱싱 허용 (기본값).
- noindex
: 페이지 인덱싱 금지.
- follow
: 페이지 내 링크를 크롤링 허용 (기본값).
- nofollow
: 페이지 내 링크 크롤링 금지.
- noarchive
: 검색 결과에서 캐시 페이지 표시 금지.
페이지를 인덱싱하지 않고 링크를 따라가도록 설정
<meta name="robots" content="noindex, follow">
페이지와 링크 모두 크롤링하지 않음
<meta name="robots" content="noindex, nofollow">
페이지를 인덱싱하고 링크도 크롤링 (기본값)
<meta name="robots" content="index, follow">
특정 검색 엔진에만 적용 (예: Googlebot)
<meta name="googlebot" content="noindex, nofollow">
e. Open Graph 메타 태그
- 소셜 미디어에서 링크 공유 시 제목, 이미지, 설명 등을 설정.
- 🍀 open graph → 밑의 이 부분에 따로 적었으므로, 자세한 설명은 생략!
f. Twitter 메타 태그
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="페이지 제목">
<meta name="twitter:description" content="페이지 설명">
<meta name="twitter:image" content="https://example.com/image.png">
twitter:card
: 카드 스타일 (summary
, summary_large_image
등).g. Viewport 메타 태그
반응형 웹에서 화면 크기에 맞게 콘텐츠를 조정.
이 태그가 없으면 모바일 브라우저가 페이지를 기본 크기로 렌더링하여 사용자가 확대/축소해야 할 수 있다.
<meta name="viewport" content="속성1=값1, 속성2=값2">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
device-width
: 디바이스의 화면 너비와 동일하게 설정width=device-width
와 initial-scale=1.0
을 포함하자. 이는 반응형 웹디자인의 기본 설정이다.h. Charset 메타 태그
<meta charset="UTF-8">
i. Author 및 기타 정보
<meta name="author" content="존잘경일">
<meta name="theme-color" content="#ffffff">
요약
Meta 태그는 SEO와 사용자 경험을 최적화하는 데 필수적입니다. Title과 Description을 비롯해, Open Graph와 Viewport 태그는 웹페이지의 검색 및 공유 가시성을 크게 향상시킵니다.
Open Graph 태그의 특징
주요 Open Graph 태그
og:title
: 페이지 제목og:description
: 페이지 요약 설명og:url
: 페이지 URLog:image
: 공유될 이미지 URLog:image:alt
: 이미지에 대한 설명og:site_name
: 웹사이트 이름og:type
: 콘텐츠 유형 (예: article
, website
등)article:author
: 작성자 정보article:section
: 카테고리 정보article:tag
: 태그 정보사용 예시
og:title
og:description
og:url
og:image
og:type
…<!-- 일반 meta 태그 -->
<meta
name="description"
content="Easy and convenient way to check real-time cryptocurrency price change along with the live charts"
/>
<!-- 오픈 그래프 태그 -->
<meta
property="og:description"
content="Easy and convenient way to check real-time cryptocurrency price change along with the live charts"
/>
<head>
<meta property="og:title" content="My Awesome Page" />
<meta property="og:description" content="This is the best page ever!" />
<meta property="og:url" content="https://www.example.com/page" />
<meta property="og:image" content="https://www.example.com/image.jpg" />
<meta property="og:image:alt" content="An awesome example image" />
<meta property="og:site_name" content="Example Site" />
<meta property="og:type" content="article" />
<meta property="article:author" content="https://www.example.com/author/john-doe" />
<meta property="article:section" content="Technology" />
<meta property="article:tag" content="Open Graph, SEO, React" />
</head>
요약
Open Graph는 소셜 미디어에서 링크 공유 시 가시성과 전환율을 높여주는 태그입니다. 주요 태그를 활용해 링크의 제목, 설명, 이미지 등을 적절히 설정하면 사용자 경험을 대폭 개선할 수 있습니다.
1. react-helmet-async란?
<head>
내의 title, meta 태그 등을 동적으로 관리할 수 있는 라이브러리.2. 사용 이유
<title>
과 <meta>
태그를 설정하기 어려워 SEO에 불리.→ react-helmet-async
로 페이지별 title과 meta 태그 관리.3. 사용 방법
HelmetProvider로 앱 감싸기
index.js
또는 main.js
에서 <HelmetProvider>
로 앱을 감싼다.
import { HelmetProvider } from "react-helmet-async";
root.render(
<HelmetProvider>
<BrowserRouter>
<App />
</BrowserRouter>
</HelmetProvider>
);
페이지별 Helmet 사용
각 페이지에서 <Helmet>
으로 title과 meta 태그 설정.
```jsx
import { Helmet } from 'react-helmet-async';
const HomePage = () => (
<div>
<Helmet>
<title>Home - My Website</title>
<meta name="description" content="Welcome to My Website" />
<meta property="og:title" content="Home - My Website" />
<meta property="og:description" content="This is the home page" />
<meta property="og:url" content="https://www.mywebsite.com/" />
<meta property="og:type" content="website" />
</Helmet>
<h1>Home Page</h1>
</div>
);
export default HomePage;
```
SSR 환경에서 사용 (예: Express)
서버에서 <title>
과 <meta>
태그를 미리 렌더링하여 SEO 강화.
const helmetContext = {}; // Helmet 컨텍스트 생성
const html = renderToString(
<HelmetProvider context={helmetContext}>
<App />
</HelmetProvider>
);
const { helmet } = helmetContext;
res.send(`
<!DOCTYPE html>
<html>
<head>
${helmet.title.toString()} <!-- Title 렌더링 -->
${helmet.meta.toString()} <!-- Meta 태그 렌더링 -->
</head>
<body>
<div id="root">${html}</div>
</body>
</html>
`);
4. 특징
요약
react-helmet-async
는 React SPA와 SSR 환경에서 SEO를 강화하기 위한 필수 도구로, 페이지별 title과 meta 태그를 동적으로 관리할 수 있어 검색 엔진 크롤링과 사용자 경험을 동시에 개선합니다.
웹사이트의 검색 성능을 모니터링하고 개선할 수 있는 무료 도구다.
장점
단점
구글 검색에 관한 정보들이 정리되어있다.
단계별 활용 예시
Step 1: 계정 설정 및 사이트 등록
Step 2: 초기 데이터 확인
Step 3: 성능 분석
Step 4: 오류 수정
Step 5: 최적화 작업
Step 6: 지속적인 모니터링
해당 링크로 들어간 후 본인 웹사이트의 도메인을 입력하면된다.
도메인 주소가 아닌, IP 주소를 등록시 안된다…
http://boolock.site/
연동한 뒤 boolock.site
도메인 등록하였다.요약
Google Search Console은 웹사이트 성능 분석과 SEO 최적화를 위한 필수 도구입니다. 도메인 기반 설정이 요구되며, 지속적인 모니터링과 최적화로 검색 순위를 개선할 수 있습니다.
1. index.html
meta 태그 수정
수정 전: 기본 meta 태그만 사용. SEO와 Open Graph 정보 부족.
수정 후:
description
, robots
, author
추가.before
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/images/boolock_logo.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BooLock</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="src/app/main.tsx"></script>
</body>
</html>
after
<!doctype html>
<html lang="ko">
<head>
<!-- 기본 meta 태그 및 link -->
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/images/boolock_logo.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BooLock</title>
<meta
name="description"
content="코딩 입문자들이 html과 css를 블록으로 쉽고 재밌게 배울 수 있는 플랫폼입니다."
/>
<meta name="robots" content="index, follow" />
<meta name="author" content="부스트캠프 9기 Web31팀" />
<!-- Open Graph -->
<meta property="og:title" content="BooLock" />
<meta
property="og:description"
content="코딩 입문자들이 html과 css를 블록으로 쉽고 재밌게 배울 수 있는 플랫폼입니다."
/>
<meta property="og:url" content="<https://boolock.site/>" />
<meta property="og:image" content="/images/boolock_thumnail.png" />
<meta property="og:image:alt" content="블록코딩 플랫폼 BooLock의 썸네일" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="600" />
<meta property="og:site_name" content="BooLock" />
<meta property="og:type" content="website" />
<!-- Twitter Cards -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="BooLock: 쉽게 배우는 블록 코딩" />
<meta name="twitter:description" content="HTML과 CSS를 블록으로 쉽고 재미있게 배우세요!" />
<meta name="twitter:image" content="/images/twitter_thumbnail.png" />
</head>
<body>
<div id="root" aria-label="BooLock 플랫폼"></div>
<script type="module" src="src/app/main.tsx" defer></script>
</body>
</html>
2. img의 alt 적용 (사소하지만 중요)
alt
속성이 없어서 SEO 점수가 하락.alt
속성을 추가해 검색 엔진이 이미지를 이해하도록 지원하고, 접근성을 개선.3. 공유 링크 미리보기 개선
4. react-helmet-async 적용
```jsx
root.render(
<StrictMode>
<QueryClientProvider client={queryClient}>
<HelmetProvider>
<App />
</HelmetProvider>
</QueryClientProvider>
</StrictMode>
);
```
- `main.tsx`에서 이렇게 App을 HelmetProvider로 감싸준다.
- 이후 각 페이지 상단에 Helmet태그안에 meta 태그를 설정해주면 된다.
```jsx
return (
<>
<Helmet>
<title>BooLock - 홈</title>
<meta
name="description"
content="코딩 입문자들이 HTML과 CSS를 블록으로 배우는 BooLock의 메인 페이지입니다."
/>
</Helmet>
{isPending && <Loading />}
<div className="flex h-full w-full flex-col items-center">
<HomeHeader isBlack={true} />
<GuidesBox />
<WorkspaceContainer />
<WorkspaceModal />
</div>
</>
);
```
5. robots.txt 적용
# 모든 크롤러에게 전체 사이트 크롤링 허용
User-agent: *
Disallow:
# 사이트맵 위치 지정
Sitemap: <http://www.boolock.site/sitemap.xml>
```
- 설정 내용
- 모든 검색 엔진 크롤러가 전체 사이트를 크롤링하도록 허용.
- 사이트맵 경로 명시: `http://www.boolock.site/sitemap.xml`
6. 라이트하우스 before -> after
7. 구글에 검색 결과
요약
🌐 참고 자료
넘넘 자세하네용 잘 써먹을게용 냠