ãJavaScriptDeveloperãã³ãŒã¹ã«ã€ããŠè©³ããç¥ããããããŒã·ãã¯ãïŒç¡æã®ãŠã§ãããŒã«ãæåŸ ããŸãããã®ãŠã§ãããŒã§ã¯ãã³ãŒã¹ã®å çããã¹ãŠã®è³ªåã«çããŸãã
ã¢ããªã±ãŒã·ã§ã³éçºã«ã¯ãããã€ãã®ææ°ã®ã¢ãããŒãããããŸããæã人æ°ã®ãã2ã€ã¯ãã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒãšãµãŒããŒã¬ã³ããªã³ã°ã¢ããªã±ãŒã·ã§ã³ã§ãã
åäžããŒãžã®ã¢ããªã¯åªããããã©ãŒãã³ã¹ãçºæ®ããGoogleã¯ããŒã©ãŒã¯æ°åã®æŽæ°åŸã«ãããã«å€æŽãããŸããããããã§ãå°è±¡çãªSEOçµæã¯è¡šç€ºãããŸããããµãŒããŒã¬ã³ããªã³ã°ã䜿çšãããšãæ€çŽ¢ãšã³ãžã³çšã«ã¢ããªã±ãŒã·ã§ã³ãããå¹ççã«æé©åã§ããŸããããã®å Žåã®ããã©ãŒãã³ã¹ãããªãé©åã§ãã
NextãGatsbyãªã©ã®åªããJavaScriptãã¬ãŒã ã¯ãŒã¯ã®åºçŸã«ããããµãŒããŒã§ã¬ã³ããªã³ã°ãããã¢ããªã±ãŒã·ã§ã³ãå¢ããŠãããããç¹ã«é«ãæ€çŽ¢ã©ã³ãã³ã°ãå¿ èŠãªå Žåã«ãåäžããŒãžã®ã¢ããªã±ãŒã·ã§ã³ãå¿ ãããåªãããœãªã¥ãŒã·ã§ã³ã§ãããšã¯éããªãçç±ãèŠãŠã¿ãŸãããã
ã·ã³ã°ã«ããŒãžã¢ããªã®äœãåé¡ã«ãªã£ãŠããŸããïŒ
åäžããŒãžã®ã¢ããªãšãµãŒããŒåŽã®ã¬ã³ããªã³ã°ã®ã©ã¡ãã䜿çšãããã決å®ããåã«ãã³ã³ãã³ãã決å®ãã䟡å€ããããŸãã
åäžããŒãžã®ã¢ããªã¯ã1ã€ã®HTMLããŒãžã®ã¿ãããŒãããŸãããŠãŒã¶ãŒãæ°ããHTMLã³ã³ãã³ããèŠæ±ãããã³ã«ãDOMèŠçŽ ãæäœããããšã«ãã£ãŠJavaScriptã«ãã£ãŠåçã«ããŒããããŸããããããæ¯åæ°ããHTMLããŒãžãããŒãããå¿ èŠããªãå Žåãæ€çŽ¢ãšã³ãžã³ã®æé©åã«åé¡ãããã®ã¯ãªãã§ããïŒ
åé¡ã¯ãæ€çŽ¢ãšã³ãžã³ãé©åã«ã€ã³ããã¯ã¹ãäœæã§ããªãããšã§ããµãŒããŒã§ã¬ã³ããªã³ã°ãããã¢ããªã±ãŒã·ã§ã³ãšã¯å¯Ÿç §çã«ãåäžããŒãžã®ã¢ããªã±ãŒã·ã§ã³ãåäžããŒãžã®ã¢ããªã±ãŒã·ã§ã³ã¯ãæåã®HTMLããŒãžã®ã¿ãããŒãããŸãããã®çµæãæ€çŽ¢ãšã³ãžã³ã¯ãå€æŽã®ãã³ã«JavaScriptã䜿çšããŠåäœæãããã³ã³ãã³ãã«ã€ã³ããã¯ã¹ãä»ããããšãã§ããŸããããåäžããŒãžã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ä»ã«ãå€ãã®å©ç¹ãããããšã«æ³šæããŠãã ãããé«æ§èœã«å ããŠãæ¥ç¶é床ãé ããŠãèªã¿èŸŒã¿ãéããé«ã垯åå¹ ãå¿ èŠãšããŸããã ãã¢ãã€ã«ããã€ã¹ã§ã®ããã©ãŒãã³ã¹ãåäžããŸãã
äžæ¹ããµãŒããŒã§ã¬ã³ããªã³ã°ãããã¢ããªã±ãŒã·ã§ã³ãç¹ã«Next.jsã䜿çšããŠæ§ç¯ãããã¢ããªã±ãŒã·ã§ã³ã¯ãåªããããã©ãŒãã³ã¹ãšSEOå¹çã®äž¡æ¹ãèªããŸãã
SEOïŒæ€çŽ¢ãšã³ãžã³ã®æé©åïŒ
SEOïŒè±èªã®æ€çŽ¢ãšã³ãžã³æé©åããïŒã¯ãæ€çŽ¢ãšã³ãžã³ã®æé©åã§ããã€ãŸãããµã€ããå€æŽããŠããææ©çãªæ€çŽ¢ãã©ãã£ãã¯ãåŒãä»ããã¢ã¯ã·ã§ã³ã§ããããªãã®ãŠã§ããµã€ããããé åçã§æ€çŽ¢ãšã³ãžã³ã«ã¢ã¯ã»ã¹ããããããããã«å¿ã«çããŠããã¹ãå€ãã®ç°ãªãSEOãã¯ããã¯ãšããªãã¯ããããŸãã
Next.js
Next.jsã¯ãéçã«çæãŸãã¯ãµãŒããŒã¬ã³ããªã³ã°ãããReactã¢ããªã±ãŒã·ã§ã³ã®ãã¬ãŒã ã¯ãŒã¯ã§ãããéçºè ã«å€ãã®å¯èœæ§ãéããŸããããã«äœ¿çšã§ãããŒãæ§æã¢ããªã±ãŒã·ã§ã³ã®äœæãã³ãŒãåå²ãéçHTMLããŒãžã®ãšã¯ã¹ããŒããªã©ã§ãããªã©
ãNext.jsé«ãæ€çŽ¢ãšã³ãžã³æé©åçµæãåŸããããããè¡ãããã«ç¹å¥ãªããšãããå¿ èŠã¯ãããŸãããã¢ããªã±ãŒã·ã§ã³ãäœæããã ãã§ãããã ããNext.jsã«ãã£ãŠãç¹ã«ãµãŒããŒã¬ã³ããªã³ã°ã«ãã£ãŠãåªããSEOçµæãæäŸãããŸããNext.jsã
ã©ã®ããã«æ©èœããããäŸã§èŠãŠã¿ãŸãããã
Next.jsã§ã¯ãCreate Next Appæ§é ã䜿çšããŠã1ã€ã®ã³ãã³ãã§ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
npx create-next-app
ãããžã§ã¯ããäœæãããšãããšãã°ãReactã¢ããªã®äœæãã§äœæãããä»ã®ãã³ãã¬ãŒããšã¯å°ãç°ãªãããšã«æ°ä»ãã§ããããã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®ããŒãžã¯ãã©ã«ããŒ
pages
ã«ä¿åãããåããŒãžã¯Reactã³ã³ããŒãã³ãã«ãªããŸãã
ã¢ããªã±ãŒã·ã§ã³å ã«æ°ããã«ãŒããçæããã«ã¯ããã©ã«ããŒã«æ°ãããã¡ã€ã«ãäœæãã
pages
ãã®ããã®æ°ããReactã³ã³ããŒãã³ããäœæããå¿
èŠããããŸãã
// pages/about.js
const About = () => (
<div>
<h1>About page</h1>
</div>
);
export default About;
泚æãã¢ããªã§äœæ¥ããŠãããšãããšãã°LighthouseãµãŒãã¹ã䜿çšãããªã©ãåæ段éã§ãSEOã©ã³ãã³ã°ã¬ããŒãã衚瀺ã§ããŸãã
Next.jsã䜿çšããŠæ°ããã¢ããªã±ãŒã·ã§ã³ãäœæããã®ã¯éåžžã«ç°¡åã§ããNext.jsãæ€çŽ¢ã©ã³ãã³ã°ãæ¹åãããµã€ããžã®ããå€ãã®ãªãŒã¬ããã¯ãã©ãã£ãã¯ãä¿é²ããã®ã«ã©ã®ããã«åœ¹ç«ã€ããèŠãŠã¿ãŸãããã
Next.jsã§SEOãæ¹åããæ¹æ³
Next.jsã䜿çšãããšãSEOã®çµæãå€§å¹ ã«æ¹åã§ããŸãããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®åŽé¢ãå¿ããŠã¯ãªããŸãããè¯å¥œãªSEOçµæãå¿ èŠãªå Žåã¯ã次ã®ããšãèæ ®ããŠãã ããã
ã¡ã¿
ã¿ã°ã¡ã¿ã¿ã°ã¯ããšã³ãžã³ããµã€ãã®èšªåè ãæ€çŽ¢ããããŒãžã«ã€ããŠã®ããŒã¿ãæäŸããŸãããããã¯ãæ€çŽ¢çµæããŒãžã§ã®ããŒãžã®è¡šç€ºæ¹æ³ãã蚪åè ããµã€ãã«åŒãä»ããããšãã§ãããã©ããã«åœ±é¿ããŸããã¡ã¿ã¿ã°ã¯ãŠãŒã¶ãŒã«ã¯è¡šç€ºãããŸããããæ€çŽ¢ãšã³ãžã³ã®æäžäœã«è¡šç€ºããã¢ããªã±ãŒã·ã§ã³ã®å Žåãããã¯ã³ãŒãã®æãéèŠãªéšåã§ãã
ã¡ã¿ã¿ã°ã¯ãããŒãžã«æçš¿ãããã³ã³ãã³ãã®ã¿ã€ãããã®ããŒãžã®ãããã¯ãããã³æ€çŽ¢ãšã³ãžã³ãããã衚瀺ããæ¹æ³ã«ã€ããŠæ€çŽ¢ãšã³ãžã³ã«éç¥ããŸãã
Next.jsã«ã¯ã
<
head>
ããŒãžã³ã³ããã«ã¡ã¿ã¿ã°ãè¿œå ããçµã¿èŸŒã¿ã³ã³ããŒãã³ãããããŸãã
import Head from 'next/head'
ããŒãžã«ã¡ã¿ã¿ã°ãæ¿å ¥ããã«ã¯ãçµã¿èŸŒã¿ã³ã³ããŒãã³ãã䜿çšããŸã
Head
ã
import Head from 'next/head'
const Example = () => {
return (
<div>
<Head>
<title>Example</title>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
</Head>
<p>Hi Next.js!</p>
</div>
)
}
export default Example
çµã¿èŸŒã¿ã³ã³ããŒãã³ã
Head
ã¯ããµã€ãã§ã®ã¡ã¿ã¿ã°ã®éè€ãåé¿ããŸããkeyããããã£ãè¿œå ãããšãã¡ã¿ã¿ã°ã¯1åã ã衚瀺ãããŸãã
<meta name="viewport" content="initial-scale=1.0, width=device-width" key="viewport" />
ããŒãžã«ããã€ãã®ã¡ã¿ã¿ã°ãè¿œå ããã ãã§ãã¢ããªã®æ€çŽ¢ã©ã³ã¯ãäžããããšãã§ããŸããããã§ã¯ãSEOã®éèŠãªã¡ã¿ã¿ã°ã«ã€ããŠèªãããšãã§ããŸãã
ä»ããã³ãŒãããã§ãã¯ããŠãã¡ã¿ã¿ã°ãå«ãŸããŠãããã©ãããããã³ããããå¿ èŠãªã¡ã¿ã¿ã°ã§ãããã©ããã確èªããŠãã ãããç§ãä¿¡ããŠãã ãããé©åãªã¡ã¿ã¿ã°ã¯ãã€ã³ããã¯ã¹äœæã®å質ãåäžããããªãŒã¬ããã¯ãã©ãã£ãã¯ãä¿é²ããããã«å¿ èŠãªãã®ã§ãã
çç£æ§
ãŠãŒã¶ãŒã¯ããŒãžã®èªã¿èŸŒã¿ãéãããšã«æ £ããŠãããæ°žé ã«åŸ ã€æºåãã§ããŠããŸãããã¢ããªã±ãŒã·ã§ã³ãéçºãããšãã¯ãæåã«ããã©ãŒãã³ã¹ã«ã€ããŠèããŠãã ãããããã¯ãæ€çŽ¢ãšã³ãžã³ã®äž»èŠãªã©ã³ãã³ã°èŠçŽ ã®1ã€ã§ããããŸãã
æ€çŽ¢ãšã³ãžã³ãç¹ã«Googleã¯ãæåã®ã³ã³ãã³ã衚瀺æéã䜿çšããŸãïŒFirst Contentful PaintããŸãã¯FCPïŒãäž»èŠãªããã©ãŒãã³ã¹ã¡ããªãã¯ãšããŠäœ¿çšããŸããFCPã¯ãããŒãžã®èªã¿èŸŒã¿ãéå§ãããŠããæåã®ã³ã³ãã³ãã¢ã€ãã ãç»é¢ã«è¡šç€ºããããŸã§ã®æéã枬å®ããŸããFCPãäœããšãSEOã©ã³ã¯ãäœããªããŸããNext.jsã䜿çšãããšãã«ã¹ã¿ã Appã³ã³ããŒãã³ããäœæããŠé¢æ°ã宣èšããããš
ã«ãããFCPããã³LCPã¡ããªãã¯ïŒã»ãšãã©ã®ã³ã³ãã³ãã®ã¬ã³ããªã³ã°æéãæ倧ã®ã³ã³ãã³ããã«ãã€ã³ãïŒã解æã§ããŸã
reportWebVitals
ã
// pages/_app.js
export function reportWebVitals(metric) {
console.log(metric)
}
ãã®é¢æ°
reportWebVitals
ã¯ãããŒãžã®æçµçãªã¡ããªãã¯å€ãèšç®ããããšãã«åŒã³åºãããŸããããªãã¯èªãããšãã§ãã
ã®ããã©ãŒãã³ã¹ã枬å®ãã詳现Next.jsãã¡ãããããã§ãããªãã¯FCPãæ¹åããããã®äœæ¥ã«å¿ èŠãªãã®ã§ãã
SSL蚌ææž
2014幎8æãGoogleã¯ã©ã³ãã³ã°æã«HTTPSãèæ ®ã«å ¥ãããšçºè¡šããŸãããå®å šãªHTTPSéä¿¡ãããã³ã«ã¯ãããŒã¿ããµã€ãã«éä¿¡ãããŠãŒã¶ãŒã«è¿œå ã®ä¿è·ã¬ã€ã€ãŒãæäŸããŸãã
HTTPSã«æ¥ç¶ããã«ã¯ãSSL蚌ææžãååŸããå¿ èŠããããŸããåªããSSL蚌ææžã¯ãããªãã®è²»çšããããå¯èœæ§ããããŸããNext.jsã§SSL蚌ææžãç¡æã§ååŸããã«ã¯ã©ãããã°ããã§ããïŒ
ãããè¡ãã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãVercelãªã©ã®ã¯ã©ãŠããã©ãããã©ãŒã ã«ãããã€ããå¿ èŠããããŸããVercelã¯Next.jsã®èåŸã«ããäŒç€Ÿã§ãããããçµ±åã¯ã¹ã ãŒãºã«é²ã¿ãŸããNext.jsãVercelãã©ãããã©ãŒã ã«ãããã€ããã«ã¯ãVercelCLIãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
yarn global add vercel
次ã«ããããžã§ã¯ãã«ç§»åããŠã次ã®ã³ãã³ããå®è¡ããŸãã
vercel
ãããžã§ã¯ãã¯Vercelã§å ¬éãããSSL蚌ææžã§ä¿è·ãããŸãã
ã³ã³ãã³ããéèŠ
Webãµã€ãã®èšªåè ã«è¡šç€ºãããã³ã³ãã³ããé©åã«æ瀺ããããšã¯éåžžã«éèŠã§ããé«å質ã®è£œåãäœæããããšã¯ããã¹ãŠã®éçºè ã®äž»ãªã¿ã¹ã¯ã§ãã
åäžããŒãžã¢ããªã±ãŒã·ã§ã³ãéçºãããããµãŒããŒåŽã¬ã³ããªã³ã°ã¢ããªã±ãŒã·ã§ã³ãéçºãããã¯ã衚瀺ããã³ã³ãã³ãã®çš®é¡ãšãã¯ã©ã€ã¢ã³ããããã£ãŒãããã¯ãååŸããæ¹æ³ã«ãã£ãŠç°ãªããŸãã
Next.jsãã¬ãŒã ã¯ãŒã¯ã¯ããµãŒããŒã§ã¬ã³ããªã³ã°ãããReactã¢ããªã±ãŒã·ã§ã³ãéçºããããã«æ§ç¯ãããŠãããåªããSEOãUXãããã©ãŒãã³ã¹ãªã©ãæäŸããŸããããã«ãããäŒæ¥ãéçºè ã¯ãµã€ãããããžã§ã¯ãã®å質ãåäžãããããææ©çãªæ€çŽ¢ãã©ãã£ãã¯ãä¿é²ã§ããŸãã ..ã
ããã§ã¯ãNext.jsã«ç§»åããŠããµãŒããŒåŽã®ã¬ã³ããªã³ã°ã¢ããªã±ãŒã·ã§ã³ã®å¯èœæ§ãæ倧éã«æŽ»çšããŠã¿ãŸãããããããã¯ããªããšããªãã®äŒç€Ÿã«ãšã£ãŠæçšã§ããããããŠäžè¬çã«-ãããã¯ãã çŽ æŽãããã§ãïŒãã£ãšé©ãããããšã§ãããã
çµè«
ãã®èšäºã§ã¯ãNext.jsãã¬ãŒã ã¯ãŒã¯ã詳ãã調ã¹ãããã䜿çšããŠæ€çŽ¢ãšã³ãžã³çšã®ææ°ã®ã¢ããªã±ãŒã·ã§ã³ãæé©åããæ¹æ³ãåŠã³ãŸããããŸããäžè¬çãªSEOã®æŠå¿µãæŽçããã¢ããªã±ãŒã·ã§ã³ãéçºããéã«èæ ®ãã¹ãåŽé¢ã§ããã¡ã¿ã¿ã°ãããã©ãŒãã³ã¹ãSSL蚌ææžãªã©ã«ã€ããŠã説æããŸããã
LogRocketïŒå®å šãªWebã¢ããªã±ãŒã·ã§ã³ã®å¯èŠæ§
LogRocketã¯ããŠãŒã¶ãŒã®åé¡ããã©ãŠã¶ãŒã§çºçãããã®ããã«ç¹°ãè¿ãããšãã§ããWebã¢ããªã±ãŒã·ã§ã³ç£èŠãµãŒãã¹ã§ããããã§ããšã©ãŒãçºçããçç±ãæšæž¬ããããã¹ã¯ãªãŒã³ã·ã§ããããã°ãã³ãããŠãŒã¶ãŒã«èŠæ±ãããããå¿ èŠã¯ãããŸããã LogRocketã䜿çšãããšãã»ãã·ã§ã³ãåçããŠãåé¡ã®åå ãçªãæ¢ããããšãã§ããŸããEtotãµãŒãã¹ã¯ãä»»æã®ã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ãšã·ãŒã ã¬ã¹ã«é£æºããŸããããã«ããã©ã°ã€ã³ã䜿çšããŠãReduxãVuexãããã³ã®ã³ã³ããã¹ããè¿œå ã§ããŸã
@ngrx/store
ã
LogRocketã¯ãReduxã®ã¢ã¯ã·ã§ã³ãšç¶æ ãè¿œå ããã ãã§ãªããã³ã³ãœãŒã«ãã°ãJavaScriptãšã©ãŒãã¹ã¿ãã¯ãã¬ãŒã¹ããããã¯ãŒã¯èŠæ±ãšå¿çãããããŒãšæ¬æããã©ãŠã¶ãŒã¡ã¿ããŒã¿ãããã³ã«ã¹ã¿ã ãã°ãšãšãã«èšé²ããŸããDOMã䜿çšããŠããŒãžã«HTMLãšCSSãèšè¿°ããæãè€éãªåäžããŒãžã¢ããªã±ãŒã·ã§ã³ã§ããã¯ã»ã«ããšã®ãããªåçãæäŸããŸãã
ç¡æã§ãè©Šããã ããã
ç¶ããèªãïŒ