1. Nextra를 이용해 블로그 만들기
naver 블로그 → 티스토리 → jekyll github blog → velog → hexo blog → nextra blog까지 여러가지 블로그 플랫폼을 사용해왔다. 티스토리를 쓰다보니 디자인은 마음대로 수정할 수 있었지만, 마크다운 지원이 아쉬워서 직접 블로그를 만들기로 했고, jekyll로 만들었으니나 ruby를 잘 몰라 수정하는데 약간의 제약이 있었다.
이후 velog로 넘어갔으나 디자인을 마음대로 수정못해 아쉬웠고, hexo로 넘어가 디자인하고 잘 수정하면서 만족했으나, mdx가 써보고 싶어져서 이참에 next.js로 넘어가기고 했다가 발견한 것이 nextra이다. 결론은 굉장히 만족하면서 쓰고 있다.
1.1 Nextra란?
Nextra is a framework on top of Next.js, that lets you build content focused websites. It has all the great features from Next.js, plus extra power to create Markdown-based content with ease.
Next.js와 MDX를 합쳐놓은 프레임워크이다. next.js를 만든 vercel 팀에서 관리하는 정적 사이트 생성기이다.
1.2 테마를 이용해 빠르게 시작하기
nextra에서는 현재 Documentation과 Blog 두 개의 테마를 제공한다. 이 중 Docs 테마가 좀 더 다양한 기능을 제공하고 더 마음에 들어서 Docs 테마를 사용했다.
1.2.1 Install
- Docs Theme – Nextra
- 공식 문서 그대로 따라가면 된다.
Next.js , React , Nextra 및 Nextra Blog Theme 를 설치한다.
1yarn add next react react-dom nextra nextra-theme-docs
1.2.2 Next.js 구성 추가
프로젝트 루트 디렉터리에 next.config.js를 만든다.
1const withNextra = require('nextra')({2theme: 'nextra-theme-blog',3themeConfig: './theme.config.jsx',4})56module.exports = withNextra()78// If you have other Next.js configurations, you can pass them as the parameter:9// module.exports = withNextra({ /* other next.js config */ })
1.2.3 블로그 테마 구성 만들기
프로젝트 루트 디렉터리에 theme.config.jsx 파일을 만든다.
해당 파일은 Nextra 블로그 테마를 구성하는데 사용된다.
1export default {2logo: <span>My Nextra Documentation</span>,3project: {4link: 'https://github.com/shuding/nextra',5},6// ... other theme options7}
1.2.4 준비 완료!
이제 yarn start 명령어를 통해 시작할 수 있다.
해당 명령어를 사용하기 위해서는 package.json에 아래와 같이 설정을 추가해야한다.
1"scripts": {2"dev": "next",3"build": "next build",4"start": "next start"5},
여기까지 수행하면 Nextra를 사용하기 위한 기본 구성을 마칠 수 있다. 이제 간단한 글을 올려볼 수 있다.
2. 페이지 구성
pages 폴더에 _meta.json를 생성하여 페이지에 대한 구성을 정의할 수 있다.
"type": "page"를 사용하면 사이드바가 아닌 내비케이션 바에 특수 페이지로 표시된다.
즉, 여러 개의 하위문서 또는 연락처와 같은 특수 페이지나 링크를 가질 수 있게 된다.
About과 Posts 두 개의 메뉴를 갖도록 구성할 수 있다.
1{2"index": {3"title": "About",4"type": "page"5},6"posts": {7"title": "Posts",8"type": "page"9}10}
2.1 About 글 작성
Nextra를 사용하면 pages 디렉토리 안의 모든 파일이 MDX로 렌더링 된다.
즉 페이지에 표시될 글은 .mdx 파일에 Markdown으로 작성하면 된다.
예로 About 페이지에 띄울 글을 아래와 같이 작성할 수 있다.
1---2type: page3title: About4date: 2023/12/085---67# 여러분의 친절한 이웃, 베르닉트89> Email. dhktjdyd12@naver.com1011사용자 중심의 개발를 지향하는 낙천주의자입니다.12머리 속 생각을 정리하는 글을 쓰는 것을 즐깁니다.1314사람이 행복을 느끼는 알고리즘이 무엇일지 고민한 끝에,15중요하게 여기는 가치는 성장, 베풂이라 생각합니다.1617출처를 남기려고 노력하지만, 작업을 하다가 까먹을 수 있습니다.18정확한 출처 표기를 하지 못했다면 죄송합니다.1920> 잡설21>22> 제가 가장 좋아하는 캐릭터는 스파이더맨과 조커입니다.23> 두 캐릭터의 공통점은 온갖 역경과 고난이 그들에게 온다는 것입니다.24> 그렇지만 결정적인 차이점은 스파이더맨에게는 자신을 끝까지 믿어주는 한 사람, 메이 숙모가 있다는 것이고,25> 조커는 그러한 사람이 없단 점입니다.26>27> 한 사람의 인생에서 단 1명이라도 자신을 믿어준다는 것은28> 어마어마한 변화를 불러일으킬 수 있다는 점을 보여주는 예시가 아닐까 생각이 듭니다.29> 내가 사랑하는 가족, 친구들이 어려운 시기에 따뜻한 말 한마디 건네보는 건 어떨까요?
2.2 Posts 글 작성
여러 개의 하위 문서를 가질 수도 있다.
posts 폴더 아래에 MDX 파일을 추가하면 된다.
1---2title: Hello!3date: 2023/02/074---56## 3. Hello!78Hello, Nextra!
글의 목록을 띄우기 위해서는 posts 폴더에 index.mdx를 추가해주면 된다.
이렇게 Nextra를 이용해 간단하게 블로그를 만들 수 있다. 자세한 내용은 아래의 글을 참고할 수도 있다.
3. SEO 적용하기
next-seo를 사용하여 손쉽게 seo를 구현할 수 있다.
3.1 Install
next-seo 를 설치한다.
1yarn add next-seo
3.2 DefaultSeo 설정
_app.jsx에 DefaultSeo를 설정할 수 있다.
속성에 대해서는 여기서 확인할 수 있다.
1import { DefaultSeo } from 'next-seo'23const DEFAULT_SEO = {4title: 'berenickt',5description: "berenickt's Dev Blog",6canonical: 'https://www.carrotins.com',7openGraph: {8type: 'website',9locale: 'ko_KR',10url: 'https://berenickt.vercel.app/',11title: "berenickt - Yewon-Noh's Dev Blog",12siteName: 'berenickt',13images: [14{15url: '/images/image.png',16width: 285,17height: 167,18alt: '이미지',19},20],21},22}2324export default function Nextra({ Component, pageProps }) {25return (26<>27<DefaultSeo {...DEFAULT_SEO} />28</>29)30}
4. 검색 엔진에 등록하기
블로그를 만들면 바로 검색 엔진에 표시되는 것이 아니라 크롤링을 요청해야 한다.
소유권을 확인하기 위한 방법으로는 두가지가 있다.
- 제공되는 HTML 파일을 프로젝트에 넣는다.
- 사이트 홈페이지에 메타태그를 추가한다.
권장하는 방법인 1번 방법을 사용해서 설정했다.
HTML 파일을 다운로드 받아 public 폴더 아래에 추가해주었다.
소유권 확인을 마치고 하루 이틀 정도 지나면 Google에서 검색 결과로 확인할 수 있다.
5. Vercel Analytics로 방문자 수 집계하기
이 블로그는 vercel를 이용해 배포하고 있다.
구글 애널리틱스와 같이 방문자 수를 집계하기 위한 설정을 해주었다.
5.1 Install
@vercel/analytics 패키지를 설치한다.
1yarn add @vercel/analytics
5.2 App에 Analytics 컴포넌트 추가
pages/_app.jsx 파일에 아래를 추가해준다.
1import { Analytics } from '@vercel/analytics/react'23export default function Nextra({ Component, pageProps }) {4return (5<>6...7<Component {...pageProps} />8<Analytics />9</>10)11}
수정한 코드를 배포하면 Vercel의 Analytics 탭에서 확인할 수 있다.
6. U+002C 에러
렌더링 과정에서 이유는 모르겠지만, mdx에서 <>, <> 형태같은 괄호를 그냥 쓰면 렌더링이 되질 않는다.
써야한다면 위와 같이 백틱으로 감싸서 사용하자.
1Unexpected character `,` (U+002C) in name,2expected a name character such as letters, digits,3`$`, or `_`; whitespace before attributes; or the end of the tag