高円寺.dev #1で発表に使った資料です。 https://koenji.connpass.com/event/152640/
11/15のフロントエンドカンファレンス福岡の前夜祭で話した資料を元にした拡張版になっています。 https://fec-fukuoka.connpass.com/event/154737/ https://speakerdeck.com/rukiadia/chi-yan-du-miip-mitofalsezheng-siifu-kihe-ifang
ԆಡΈࠐΈͱͷਖ਼͍͖͠߹͍ํ2019/11/21 ߴԁࣉdev@rukiadia
View Slide
About me• Sho Yamada• @rukiadia (Twitter, Github, etc…)• Frontend Engineer at Omicale.Inc
ࠓͷςʔϚԆಡΈࠐΈͰ͢
ͷࣦഊஊΛฉ͍͍ͯͩ͘͞
ࠓճ͢͜ͱ• ϢʔβମݧΛྑ͘͠Α͏ͱͨ͠Βɺ࣮ϢʔβʔମݧΛଛͳ͍ͬͯͨ• ྑ͔Εͱࢥͬͯͬͨ͜ͱ͕SEO໘ͰωΨςΟϒͳ݁ՌΛট͍ͨ• ը૾ͷԆಡΈࠐΈʹ͍ͭͯ• ৼΓฦΓͱ·ͱΊ
લஔ͖• SPAʹؔΘΔ΄ͱΜͲग़͖ͯ·ͤΜɻ• ࠓճը૾ͷΈʹཹ·Βͣɺଞͷཁૉಈతʹੜ͍ͯ͠·͢ɻ• ࠓճͷࣦഊஊɺ·ͩશʹΓӽ͑ΒΕͯ·ͤΜʢ2019/11/21࣌Ͱʣ
1. ࣮ϢʔβମݧΛଛͳ͍ͬͯͨέʔε
ϖʔδͷදࣔΛ্͛ͯϢʔβମݧΛྑ͘͠Α͏ʂ
ࠓճࢼͨ͜͠ͱ• ΧʔυUIΛྻڍ͍ͯ͠ΔϖʔδͰը໘දࣔޙʹΧʔυUIΛੜΛͯ͠ɺը໘ͷॳճදࣔΛૣ͘͢Δɻ• ཁɺϑΝʔετϏϡʔʹऩ·Βͳ͍ͷޙ͔Β࡞Ε͍͍ͷͰͳ͍͔ʁͱ͍͏• ࣮ࡍͷURLʢhttps://party-calendar.net/area/tokyoʣ
ˡ͔͜͜ΒԼ࠷ॳݟ͑ͯͳ͍ɻˡ੨͘ͳ͍ͬͯΔ෦"1*ܦ༝Ͱޙ͔Β࡞Δ
ࠓճͷΒ͔͠ϙΠϯτϒϥβόοΫͬͨ࣌ɺϖʔδͷεΫϩʔϧҐஔ͕ζϨͯ͠·͏ɻ
࣍ͷը໘
͖ͬ͞ݟͯͨͷͲ͜ʁϒϥβόοΫ
ΘΓ·ͨ͠ɾɾʁ
Ͳ͏͍͏͜ͱͳͷ͔ʁ• ΧʔυUI͕͋Δϖʔδ͔Β࣍ͷϖʔδʹભҠ͢Δɻ• ભҠઌ͔ΒϒϥβόοΫͰΔɻ• ཁૉͷԆಡΈࠐΈ͕࢝·Δɻ• ಡΈ͜Έ͕ऴΘΔͱɺϖʔδͷ͕͞มԽͯ͠͠·͍εΫϩʔϧҐஔ͕ζϨΔɻ
ࠓճͷέʔεͷରࡦ• ϒϥβόοΫͨ࣌͠ɺͦͦԆಡΈࠐΈΛΒͳ͍ɻ• ԆಡΈࠐΈ͕ऴΘΔ·ͰμϛʔཁૉΛஔ͓͖ͯ͠ɺੜͨ͠ཁૉΛஔ͖͑Δ͜ͱͰϖʔδͷ͕͞มΘΒͳ͍Α͏ʹ͢Δɻ
ࠓճબΜͩରࡦʮμϛʔઓ๏ʯ• ͔͠͠ɺ͜ͷରࡦᘳͰ͋Γ·ͤΜɻ• ޙ͔Βදࣔ͢ΔཁૉͷݸAPIͷϨεϙϯε࣍ୈͳͷͰɺ༧Ίஔ͓ͯ͘͠μϛʔཁૉͷΛඞཁʹԠͯ͡ม͑Δ͜ͱ͕ग़དྷ·ͤΜɻ• DOMͷߏΛม͑Δճ͕૿͑ΔͷͰɺϒϥβͷϦϑϩʔ૿͑ͯ͠·͍·͢ɻ
ݱ࣮ݫ͍͠
2. SEOతʹωΨςΟϒͳ݁ՌΛট͍ͨέʔε
ԆಡΈࠐΈͨ͠ϖʔδΫϩʔϥʔ͔ΒͲ͏ݟ͍͑ͯΔͷ͔ʁ
ࠓճͷΒ͔͠ϙΠϯτԆಡΈࠐΈͰੜͨ͠ཁૉ͕Ϋϩʔϥʔʹೝࣝ͞Ε͓ͯΒͣɺΠϯσοΫε͞Ε͍ͯͳ͔ͬͨɻ
SEOʹࠨӈ͞ΕΔαʔϏεʹͱͬͯڪාͦͷͷ
Կ͕ىͬͨ͜ͷ͔ʁ• ԆಡΈࠐΈ͕ऴΘΔલʹΫϩʔϥʔ͕ؼͬͯ͠·͏έʔε͕͋ͬͨɻ• ্ख͍͍ͬͯ͘Δϖʔδ͋ͬͨͷͰɺൃݟ͕Εͨɻ• Ϋϩʔϥʔ͕ͲΕ͘Β͍ͬͯ͘ΕΔͷ͔͔Βͳ͍ɻ1͘Β͍ͬͯͯ΄͍͠ɻ
Ξϯνύλʔϯ• JavaScriptͷॲཧʹ͕͔͔࣌ؒΓ͍͗ͯ͢Δɻ• DOMContentLoadedͷλΠϛϯάͰ৭ʑΓ͗ͯ͢Δύλʔϯͱ͔• λΠϛϯάΛม͑ͨΓɺworkerʹॲཧΛಀͨ͠Γɻ߹ʹΑΔ͕खஈ৭ʑɻ
ࣄલௐࠪେࣄ• ࣮ʹIntersection ObserverΛ͍·͠ΐ͏ɻ• https://developers.google.com/search/docs/guides/lazy-loading• ͜͜ͷղઆΛಡΉ͠ɻ• pupperterΛ༻͍࣮ͨςετՄೳɻ• Ϋϩʔϥʔ͕ೝࣝͯ͘͠ΕΔ͔Ͳ͏͔ผɻ
ෆ֬ఆཁૉଟ͍ͷͰͱ͔͘ݕূ͢Δ͜ͱ͕େࣄ
3. ը૾ͷԆಡΈࠐΈ
ը૾ΛͲ͏ද͖͔ࣔ͢• imgཁૉͰදࣔ͢Δʁ• background-imageͰഎܠը૾ʹ͢Δʁ
ҰҰ͋Γ·͕͢ɺࠓճimgཁૉΛਪ͠·͢
imgཁૉͷϝϦοτ• ಡΈࠐΈʹࣦഊͨ࣌͠ͷaltଐੑ͕͑Δɻ• Ϋϩʔϥʔʹೝࣝ͞ΕΔɻ• decoding=“async”͕͑Δɻ• loading=“lazy”͕͑Δɻ
altଐੑ͕͑Δ• ը૾ͷಡΈࠐΈʹࣦഊͨ࣌͠ʹϢʔβͷઆ໌͕ग़དྷΔɻ• ύϑΥʔϚϯεʹؔͳ͍Ͱ͋Δ͕ɺΞΫηγϏϦςΟతʹimgཁૉ͕༗རɻ
Ϋϩʔϥʔ͔Βೝࣝ͞ΕΔ• divཁૉͳͲͰഎܠը૾Λઃఆͯ͠ɺΫϩʔϥʔ͔Βը૾ͩͱೝࣝ͞Εͳ͍ɻ• ࢀߟURLɿhttps://twitter.com/konojunya/status/1194429597309292545
decodingଐੑ͕͑Δ• ϒϥβʹը૾ͷσίʔυώϯτΛఏڙ͢ΔଐੑͰɺͦͷதʹasyncͱ͍͏ଐੑ͕͋Δɻ• ʮଞͷίϯςϯπͷද͕ࣔΕͳ͍Α͏ʹɺը૾Λඇಉظతʹσίʔυ͠·͢ɻʯ˞MDN͔ΒͷҾ༻• SafariͰ͑ͳ͍ͱ͞Ε͍ͯΔ͕ɺݱࡏ
loadingଐੑʹ͍ͭͯ• ଐੑΛࢦఆ͓͚ͯ͠ɺϒϥβ͕ࣗಈͰԆಡΈࠐΈΛͬͯ͘ΕΔɻ• ࢀߟURLɿhttps://blog.jxck.io/entries/2019-05-20/lazyloading.html• ͪͳΈʹChromeͰ͔͑͠·ͤΜɻඪ४Խ·ͩ͞Εͯ·ͤΜɻʢ2019/11/21࣌ʣ
Կ͕خ͍͠ͷ͔ʁ
ը૾ͷlazyloadΛ͠ͳͯ͘ࡁΉ• JavaScriptͰ࣮Λ͠ͳ͍͍ͯ͘ɻ• ʮμϛʔը૾Λຊདྷͷը૾ʹࠩ͠ସ͑Δʯͱ͍ͬͨॲཧෆཁʹͳΔͷͰɺϒϥβʹ༏͍͠ɻΒͳͯ͘ࡁΉ͜ͱΒͳ͍͍ͯ͘ɻ• ※ IEΛߟྀ͢Δ߹JavaScriptͰ࣮͓͍ͯͨ͠ํ͕ແͰ͋Δɻ
ͬͯΈͯͷৼΓฦΓ
লͱৼΓฦΓ• ࣦഊͨ͠ͷͷɺૉૣͤͨ͘ͷෆதͷ͍ɻࣦഊΛఆͯ͠ɺ࣮ൣғݶఆ͍ͯͨ͠ɻ• ࣮ˠݕূΛૉૣ͘ߦ͍ɺ࣮ੈքʹΠϯύΫτ༩͑Δͷ͕େࣄɻ1ճͷࣦഊ͘Β͍Ͱ࠳͚͍ͯΒΕͳ͍ɻ• ύϑΥʔϚϯεΛग़͢ͷ؆୯Ͱͳ͍ͱ࠶ೝࣝɻΔલগܰ͘͠ߟ͍͑ͯͨઅ͋Δɻ
Thanks!!