개츠비와 함께 검색엔진 최적화를 최우선으로 삼다


내가 Gatsby에 끌리는 것은 React에 대한 나의 사랑과 신속하고 성능이 탁월하며 응답이 빠른 응용 프로그램에 서비스를 제공하고 싶은 소망 때문이다.저는 React를 배우기 시작했습니다. 도서관에서 ES6 수업을 받기 시작했을 때create-react-app가 유행하기 시작했을 때입니다.처음에는 프런트엔드와 node/express API를 병행하기 위한 학습 에이전트의 단순성이 도전이었습니다.그러나 이 점에서 서버 측의 렌더링까지는 더 많은 연구와 노력이 필요하다.더 큰 인코딩 커뮤니티에서 배우는 것은 줄곧 매우 재미있다.나는 내가 만나고 해결한 다른 기술 문제, 그리고 내가 아직 배워야 할 기술 문제를 계속 열거할 수 있다. 그러나 지금까지 나의 여정에 관해서는 이것은 기술적인 첫 번째 여정이고 중점은 각종 언어와 라이브러리의 지식과 기술이다. 그렇지만 주요한 것은 아닐 수도 있다.마지막으로 고려해야 할 것은 검색엔진의 최적화, 접근 가능성과 안전성이다.

SEO를 우선시하는 마음가짐.


저는 접근성과 안전성에 대한 미래 댓글을 남길 것입니다. 그러나 지금까지 제가 Gatbsy 생태계에 깊이 들어가는 과정에서 저에게 깊은 인상을 남긴 것은 검색엔진 최적화의 편의성입니다.사실상, 사용자 인터페이스를 개발하기 전에, 당신은 당신의 사이트나 응용 프로그램에 검색 엔진이 최적화되어 구동되는 구조를 만들 수 있습니다.나는 네가 나를 통해 배운 것을 가지고 지금까지 게이츠비 사이트 검색엔진의 최적화를 최적화할 권리를 처음부터 가지고 싶다.

저희가 시작하기 전에.


개츠비에 익숙해져야 해.gatbsy-cli를 설치하고 많은 Gatsby 초보자 중 한 명으로부터 새로운Gatsby 프로젝트를 만드는 방법을 알아보려면 completing the Gatsby tutorial 를 고려하십시오.
그렇지 않으면 SEO 범주에서 pick a starter 를 선택하고 SEO 구성 요소를 열거나 명령줄에서 실행합니다gatsby-starter-default.
gatsby new seo-blog https://github.com/gatsbyjs/gatsby-starter-default
SEO 구성 요소는 react-helmet 에 의존합니다. 초보자가 SEO 초기화를 포함하지 않으면 추가하십시오.우리는 또한 연합을 위해 사이트맵, 구글 analytics, RSS 등 다른 기능을 추가하고 싶습니다.마지막으로, 우리는 검색 엔진이 사이트를 어떻게 캡처하는지 관리하기 위해 robots.txt 을 만들어야 한다.간격을 두기 위해 다음 명령을 분할하지만 모두 yarn add 명령으로 실행할 수 있습니다.
yarn add react-helmet gatsby-plugin-react-helmet 
yarn add gatsby-plugin-feed gatsby-plugin-google-analytics gatsby-plugin-sitemap
yarn add gatsby-plugin-robots-txt
당신의 초보자와 이 플러그인들이 설치됨에 따라, 우리는 이미 우리의 사이트 검색 엔진의 최적화 성능을 구축할 준비가 되어 있습니다.

개츠비 설정을 설정합니다.회사 명


새 개츠비 프로젝트의 루트 디렉터리에서 개츠비는 siteMetaDataseveral other important features 파일을 설정하는 데 사용됩니다.
이 파일plugins은 모든 중요한 SEO 관련 내용을 GraphQL로 가져오거나 필요한 파일(예: gatsby-config.js을 직접 만듭니다.

사이트 메타데이터


메타데이터는 듣듯이 크로스 사이트나 전체 사이트 실체로 확장된 데이터이다.어디서든 사용할 수 있지만 검색엔진 최적화 구성 요소와 구글 구조화 데이터를 설정할 때 가장 편리하다.
메타데이터를 키/값 쌍이 있는 객체 문자로 초기화합니다. 이 키/값 쌍은 robots.txt 태그로 변환되거나 글로벌 사이트 데이터가 필요한 위치에 관계없이 사이트 맵 또는 페이지 하단에 전달될 수 있습니다.
<meta name="title" content="My Super Awesome Site"/>
<meta name="description" content="My Super Awesome Site will blow your mind with radical content, extravagant colors, and hip designs."/>
다음은 전체 사이트에서 사용할 수 있는 내용을 계획하는 것입니다.
  • 제목
  • 설명
  • 키워드
  • 현장검증
  • 사회관계
  • 기타
  • 설정 <meta> 을 사용하면 플러그인 초기화에서 사용할 수 있고 같은 siteMetadata 파일에서 사용할 수 있도록 이 데이터를 조회할 수 있습니다.다음 질의를 수행할 수 있도록 내 gatsby-config.js 를 구성했습니다.
    query: `
      site {
        siteMetadata {
          title
          description
          author
          siteUrl
          siteVerification {
            google
            bing
          }
          social {
            twitter
          }
          socialLinks {
            twitter
            linkedin
            facebook
            stackOverflow
            github
            instagram
            pinterest
            youtube
            email
            phone
            fax
            address
          }
          keywords
          organization {
            name
            url
          }
        }
      }
    `
    
    이 질의는 이 질의 구조와 일치하는 객체를 반환합니다.
    site: {
      siteMetadata: {
        title: String,
        description: String,
        author: String,
        siteUrl: String,
        siteVerification: {
          google: String,
          bing: String
        },
        social: {
          twitter: String
        },
        socialLinks: {
          twitter: String,
          linkedin: String,
          facebook: String,
          stackOverflow: String,
          github: String,
          instagram: String,
          pinterest: String,
          youtube: String,
          email: String,
          phone: String,
          fax: String,
          address: String
        },
        keywords: [String],
        organization: {
          name: String,
          url: String
        }
      }
    }
    

    플러그인 설정


    우리는 사이트 맵, RSS 요약, 로봇에 사용되는 네 개의 플러그인에 중점을 둘 것이다.txt 파일 및 Google Analytics(사이트 추적용 SEO 성공률)우리는 siteMetadata 이후에 플러그인을 초기화할 것입니다.
    module.exports = {
        siteMetadata: {
          / **SEE ABOVE** /
        },
        plugins: [/ **An ARRAY** /], }
    

  • 게츠비 플러그인 사이트 지도
    사이트 맵 플러그인은 간단하게 사용할 수도 있고 옵션과 함께 사용할 수도 있습니다.일반적으로 고품질의 내용을 포함하고 중복된 내용, 간소화된 내용 또는 인증된 페이지를 제외하기를 원합니다.개츠비는 하나detailed walkthrough for setting up your sitemap를 제공했다.
    plugins: [
    {
    resolve: `gatsby-plugin-sitemap`,
    options: {
      exclude: [`/admin`, `/tags/links`] 
    }
    },
    ]
    

  • 개츠비 플러그인 개요
    RSS 개요는 연합 사이트의 내용에 도움이 된다. 예를 들어 당신은 블로그를 가지고 있다. 다른 성숙한 블로그에 교차 발표하려면 사이트의 변경 사항을 검색 엔진에 전달하는 데 도움이 된다.이 플러그인은 GraphQL로 데이터를 조회하는 기능을 사용하여 임의의 다른 개요를 만들 수 있습니다.다음 섹션은 siteMetaData 페이지와 게시물의 구조에 따라 다릅니다.요약은 gatsby-node.js 의 각 페이지를 훑어보고 XML RSS 요약을 생성합니다.개츠비는 하나detailed walkthrough for adding an RSS feed를 제공했다.
    특히 아래의 조회를 사용하여 요점을 완성하는 데 주의해야 한다.
    {
    resolve: `gatsby-plugin-feed`,
    options: {
    // graphQL query to get siteMetadata 
    query: ` 
      { 
        site { 
          siteMetadata { 
            title 
            description 
            siteUrl 
            site_url: siteUrl, 
            author 
          }
        }
      } 
    `, 
    feeds: [
      // an array of feeds, I just have one below
      {
        serialize: ({ query: { site, allMarkdownRemark } }) => {
          const { siteMetadata : { siteUrl } } = site;
          return allMarkdownRemark.edges.map(edge => {
            const { 
              node: { 
                frontmatter: {
                  title, 
                  date, 
                  path, 
                  author: { name, email }, 
                  featured: { publicURL }, 
                  featuredAlt
                },
                excerpt, 
                html
              } 
            } = edge;
            return Object.assign({}, edge.node.frontmatter, {
              language: `en-us`,
              title,
              description: excerpt,
              date,
              url: siteUrl + path,
              guid: siteUrl + path,
              author: `${email} ( ${name} )`,
              image: {
                url: siteUrl + publicURL,
                title: featuredAlt,
                link: siteUrl + path,
              },
              custom_elements: [{ "content:encoded": html }],
            })
          })
        },
        // query to get blog post data 
        query: ` 
          { 
            allMarkdownRemark(  
              sort: { order: DESC, fields: [frontmatter___date] }, 
            ) { 
              edges { 
                node { 
                  excerpt 
                  html 
                  frontmatter { 
                    path 
                    date 
                    title 
                    featured { publicURL } 
                    featuredAlt 
                    author { 
                      name 
                      email 
                    } 
                  } 
                } 
              } 
            } 
          } 
        `, 
        output: "/rss.xml",
        title: `My Awesome Site | RSS Feed`,
      },
    ],
    },
    },
    

  • 개츠비 플러그인 로봇 txtmarkdown 파일을 사용하면 특정 조건에 따라 파충류가 사이트 및/또는 단일 경로를 무시할 수 있습니다.See the plugin description for more detailed use cases .
    {
    resolve: 'gatsby-plugin-robots-txt',
    options: {
    policy: [{ userAgent: '*', allow: '/' }] 
    }
    },
    

  • 게이츠비 플러그인 구글 분석
    Google analytics는 사용자가 사이트와 상호작용하는 방법을 추적하는 데 도움을 주기 때문에 시간이 지날수록 사이트를 관리하고 업데이트하여 더욱 좋은 검색 엔진 최적화 결과를 얻을 수 있습니다.구글을 사용하여 웹 사이트를 검증하고 분석 키를 여기에 저장합니다.
    {
    resolve: `gatsby-plugin-google-analytics`,
    options: {
    trackingId: ``, 
    },
    },
    
  • 검색 엔진 최적화 구성 요소 최적화


    SEO 구성 요소 뒤에 숨겨진 비밀은 모두가 알고 있는 robots.txt 패키지입니다.모든 페이지와 모든 템플릿은 SEO 구성 요소를 가져오기 때문에 특정한 정보를 전달하여 대중을 대상으로 하는 페이지의 메타데이터를 조정할 수 있습니다.
    당신의 상상력을 이용하여 당신은 이 구성 요소에 무엇을 전달하여 완벽한 SEO 페이지를 만들 수 있습니까?이 페이지는 로그인 페이지, 블로그 게시물, 미디어 라이브러리, 동영상, 전문 개인 정보입니까 아니면 제품입니까?https://schema.org 에는 614가지 모드가 나열되어 있습니다.특정 패턴 관련 정보를 SEO 구성 요소에 전달할 수 있습니다.
    이러한 값 중 하나를 어셈블리에 전달하면 react-hemlet 은 부족한 내용을 StaticQuery 로 채웁니다.이 데이터에 따라 siteMetaDatareact-helmet 카드 태그를 포함하여 모든 <meta> 태그를 만들고 관련 데이터를 다른 반환 open graph 구성 요소에 전달합니다.
    긴 코드 세그먼트를 포함하지 말고 시작 전 섹션 또는 refer to the twitter page for installation 을 참조하십시오.하지만 검색 엔진 최적화 구성 요소의 구조는 Dustin Schauthis excellent post의 개요에 따릅니다.
    SEO 구성 요소를 패치할 때 다음과 같은 기능이 추가되었습니다.
  • 구성 요소 to에 전달되는 추가 필드: 페이지 유형, 예를 들어 블로그 게시물을 구분하여 주 사이트 작성자를 제외한 내용의 작성자를 처리하고 페이지와 게시물의 수정 날짜를 처리합니다.앞으로 더 많이 늘릴 수 있다.
  • function SEO({
      description,
      lang,
      meta,
      keywords,
      image,
      title,
      pathname,
      isBlogPost,
      author,
      datePublished = false,
      dateModified = false
    }) {
    
  • 조건부 설정 Google Structured Data
  • {
      property: `og:type`,
      content: isBlogPost ? `article` : `website`,
    },
    
  • 항상 이미지 객체에 설정 gatsby-plugin-react-helment 속성
  • // ALWAYS ADD IMAGE:ALT 
    { property: "og:image:alt", content: image.alt }, 
    { property: "twitter:image:alt", content: image.alt },
    
  • 보안 이미지 처리
  • .concat(
      // handle Secure Image 
      metaImage && metaImage.indexOf("https") > -1 
        ? [
            { property: "twitter:image:secure_url", content: metaImage, }, 
            { property: "og:image:secure_url", content: metaImage },
        ] 
        : [] 
    )
    
  • 클래스를 사용하여 프로세스에 구성 요소를 추가합니다og:type.나는 각종 문서와 문장을 읽을 때 이런 구성 요소의 예시를 만났다. 나는 내가 어디에서 이 링크를 처음 보았는지 기억이 나지 않지만, 나는 빌려 쓰고 개편했다schema.org.나는 그의 우수한 작품에 대해 두 가지 작은 변화를 했다.
  • Jason Lengstorf에서 왔습니다. SchemaOrg 구성 요소 구성

    alt 구성 요소에서 Google Structured Data 구성 요소를 가져오고 호출하여 SchemaOrg 구성 요소의 끝 표시 뒤에 배치하고 다음 속성을 전달합니다.
    function SEO(.....) {
      ...
      return (
        <> {/* Fragment Shorthand */}
          <Helmet 
            {/* All the Meta Tag Configuration */}
          />
          <SchemaOrg 
            isBlogPost={isBlogPost} 
            url={metaUrl} 
            title={title} 
            image={metaImage} 
            description={metaDescription} 
            datePublished={datePublished} 
            dateModified={dateModified} 
            canonicalUrl={siteUrl} 
            author={isBlogPost ? author : siteMetadata.author} 
            organization={organization} 
            defaultTitle={title} 
          />   
        </>
      )
    }
    
    나는 여기에서 전체 SEO 구성 요소를 복사하고 붙이지 않을 것이다.위의 링크에서 가져와서 코드에서 Jason Lengstorf에게 신뢰를 줍니다.다음은 내가 한 몇 가지 보충이다.
  • 모드에 작성자 이메일을 추가했습니다.대부분의 페이지Helmet와 블로그 게시물SchemaOrg에서 온 것이다.이것은 사이트에서 여러 명의 작성자를 지원할 것입니다. 만약 당신이 이렇게 선택한다면, 모든 페이지에서 유일하게 이 점을 반영할 수 있습니다.
  • author: {
      "@type": "Person",
      name: author.name,
      email: author.email, 
    },
    
  • 간단한 URI에서 siteMetadata 유형으로 조직 로고를 업데이트합니다.frontmatterURI는 ImageObject 유형에 대해 받아들일 수 있지만 구글은 특정한 기대를 가지고 내가 그것을 String로 변경할 때까지 오류를 던졌다.
  • publisher: {
      "@type": "Organization",
      url: organization.url,
      logo: { 
        "@type": "ImageObject", 
        url: organization.logo.url, 
        width: organization.logo.width, 
        height: organization.logo.height
      }, 
      name: organization.name,
    },
    
  • 추가OrganizationImageObject 유형의 초기 발표 후 페이지 변경 사항을 반영합니다.
  • datePublished,
    dateModified,
    
    사이트의 복잡성이 더 높을 때, 필요에 따라 로고를 이 구성 요소에 전달하여 서로 다른 유형의 패턴을 되돌릴 수 있다.그러나 당신이 무엇을 하든지 구성 요소를 통해 먼저 생성된 dataModified부터 까지 사이트를 생산에 투입하지 마세요.

    구글 구조화 데이터 테스트 도구 총체적 사고


    위에서 설명한 계획에 따라 웹 사이트를 구성할 때 저는 풍부한 이미지, 묘사적인 사회 공유 카드를 얻었을 뿐만 아니라 웹 사이트에서 Lighthouse 감사를 실행할 때 완벽한 SEO 점수를 받았습니다.

    내 사이트의 접근성 점수가 100%인 것도 볼 수 있다.게이츠비에게도 득점이 쉬우니 앞으로 내가 이 화제에서 배운 것을 이야기하겠다.
    내 블로그에 최초 게시

    좋은 웹페이지 즐겨찾기