This is page 16 of 20. Use http://codebase.md/cloudflare/docs/imgs/%7B%7Bitem.goto%20or%20item.url.path%7D%7D?format=md&lines=false&page={x} to view the full context.

# Directory Structure

```
├── .editorconfig
├── .eslintrc.json
├── .firebaserc
├── .github
│   └── workflows
│       └── semgrep.yml
├── .gitignore
├── .travis.yml
├── assets
│   ├── extra
│   │   └── brand_assets.zip
│   ├── img
│   │   ├── about
│   │   │   ├── case-studies
│   │   │   │   └── bg_lines.png
│   │   │   ├── design-principles
│   │   │   │   ├── bg1.svg
│   │   │   │   ├── bg2.svg
│   │   │   │   ├── design_icon_break.svg
│   │   │   │   ├── design_icon_fast.svg
│   │   │   │   ├── design_icon_future.svg
│   │   │   │   ├── design_icon_layers.svg
│   │   │   │   ├── design_icon_priorities.svg
│   │   │   │   ├── design_icon_ux.svg
│   │   │   │   ├── design_icon_whitelist.svg
│   │   │   │   ├── lines1.svg
│   │   │   │   └── lines2.svg
│   │   │   ├── how-amp-works
│   │   │   │   ├── line_behind.svg
│   │   │   │   └── lines_front.svg
│   │   │   ├── overview
│   │   │   │   ├── bg2.svg
│   │   │   │   ├── herobg.svg
│   │   │   │   ├── herolines1.svg
│   │   │   │   ├── herolines2.svg
│   │   │   │   ├── line4.svg
│   │   │   │   ├── lines3.svg
│   │   │   │   ├── what_phone.png
│   │   │   │   ├── what_phone@1_5x.png
│   │   │   │   └── what_phone@1x.png
│   │   │   └── who-use-amp
│   │   │       ├── adtech
│   │   │       │   ├── adtech_icon_customize.svg
│   │   │       │   ├── adtech_icon_intro.svg
│   │   │       │   ├── adtech_icon_reach.svg
│   │   │       │   ├── adtech_icon_revenue.svg
│   │   │       │   ├── indexexchange_logo.png
│   │   │       │   ├── lines.svg
│   │   │       │   ├── sharethrough_logo.png
│   │   │       │   ├── teads_logo.svg
│   │   │       │   └── triplelift_logo.png
│   │   │       ├── advertisers
│   │   │       │   ├── advertiser_phone_wired.png
│   │   │       │   ├── advertiser_phone_wired@1_5x.png
│   │   │       │   ├── advertiser_phone_wired@1x.png
│   │   │       │   ├── advertisers_bg.svg
│   │   │       │   ├── advertisers_icon_audience.svg
│   │   │       │   ├── advertisers_icon_everywhere.svg
│   │   │       │   ├── advertisers_icon_intro.svg
│   │   │       │   ├── advertisers_icon_ROI.svg
│   │   │       │   └── advertisers_lines.svg
│   │   │       ├── amp-ads
│   │   │       │   ├── ads_icon.svg
│   │   │       │   ├── cloudflare_logo.png
│   │   │       │   ├── doubleclick_logo.png
│   │   │       │   ├── google_logo.png
│   │   │       │   ├── lines_bottom1.svg
│   │   │       │   ├── lines_bottom2.svg
│   │   │       │   ├── lines.svg
│   │   │       │   ├── roi_icon.svg
│   │   │       │   ├── speed_icon.svg
│   │   │       │   └── triplelift_logo.png
│   │   │       ├── card_developers.png
│   │   │       ├── card_developers.svg
│   │   │       ├── card_smb.png
│   │   │       ├── card_smb.svg
│   │   │       ├── hero_triangle.png
│   │   │       ├── publishers
│   │   │       │   ├── globo_logo.svg
│   │   │       │   ├── nyt_logo.svg
│   │   │       │   ├── publisher_icon_business.svg
│   │   │       │   ├── publisher_icon_fast.svg
│   │   │       │   ├── publisher_icon_intro.svg
│   │   │       │   ├── publisher_icon_simple.svg
│   │   │       │   ├── publisher_phone_cnn.png
│   │   │       │   ├── publisher_phone_cnn@1_5x.png
│   │   │       │   ├── publisher_phone_cnn@1x.png
│   │   │       │   ├── wapo_logo.png
│   │   │       │   └── wired_logo.png
│   │   │       ├── who_icon_adtech.svg
│   │   │       ├── who_icon_advertisers.svg
│   │   │       ├── who_icon_publishers.svg
│   │   │       ├── who_lines1.svg
│   │   │       ├── who_lines2.svg
│   │   │       ├── who_phones_hero.png
│   │   │       ├── who_phones_hero@1_5x.png
│   │   │       └── who_phones_hero@1x.png
│   │   ├── amp_favicon.png
│   │   ├── amp-conf
│   │   │   └── speakers
│   │   │       ├── alex.jpg
│   │   │       ├── ali.jpg
│   │   │       ├── ardan.jpg
│   │   │       ├── beck.jpg
│   │   │       ├── bez.jpg
│   │   │       ├── chen.jpg
│   │   │       ├── dane.jpg
│   │   │       ├── eric.jpg
│   │   │       ├── gina.jpg
│   │   │       ├── honey.jpg
│   │   │       ├── jeremy.jpg
│   │   │       ├── john.jpg
│   │   │       ├── le.jpg
│   │   │       ├── madison.jpg
│   │   │       ├── malte.jpg
│   │   │       ├── malteandrudy.jpg
│   │   │       ├── mariko.jpg
│   │   │       ├── matthew.jpg
│   │   │       ├── mike.jpg
│   │   │       ├── natalia.jpg
│   │   │       ├── nicole.jpg
│   │   │       ├── paul.jpg
│   │   │       ├── ranna.jpg
│   │   │       ├── richard.jpg
│   │   │       ├── rudy.jpg
│   │   │       ├── sam.jpg
│   │   │       ├── sarah.jpg
│   │   │       ├── sebastian.jpg
│   │   │       ├── senthil.jpg
│   │   │       ├── sriram.jpg
│   │   │       ├── vadim.jpg
│   │   │       ├── vamsee.jpg
│   │   │       ├── will.jpg
│   │   │       └── yamini.jpg
│   │   ├── arrow-blue.svg
│   │   ├── arrow.svg
│   │   ├── background.jpg
│   │   ├── blog-icon.svg
│   │   ├── brand-guidelines.pdf
│   │   ├── case-studies
│   │   │   ├── gizmodo_logo.png
│   │   │   ├── gizmodo_phone1.png
│   │   │   ├── gizmodo_phone1@1_5x.png
│   │   │   ├── gizmodo_phone1@1x.png
│   │   │   ├── gizmodo_phone2.png
│   │   │   ├── gizmodo_phone2@1_5x.png
│   │   │   ├── gizmodo_phone2@1x.png
│   │   │   ├── gizmodo_thumb.jpg
│   │   │   ├── gizmodo.pdf
│   │   │   ├── hearst_framed.png
│   │   │   ├── hearst_framed2.png
│   │   │   ├── hearst_logo.png
│   │   │   ├── hearst_thumb.jpg
│   │   │   ├── hearst.pdf
│   │   │   ├── milestone_home_framed.png
│   │   │   ├── milestone_logo.png
│   │   │   ├── milestone_search_framed.png
│   │   │   ├── milestone_thumb.jpg
│   │   │   ├── milestone.pdf
│   │   │   ├── plista_graphic.png
│   │   │   ├── plista_logo.png
│   │   │   ├── plista_thumb.jpg
│   │   │   ├── plista.pdf
│   │   │   ├── relay_media_logo.png
│   │   │   ├── relay_media_thumb.jpg
│   │   │   ├── relay_media.pdf
│   │   │   ├── relaymedia_phone1.png
│   │   │   ├── relaymedia_phone1@1_5x.png
│   │   │   ├── relaymedia_phone1@1x.png
│   │   │   ├── relaymedia_phone2.png
│   │   │   ├── relaymedia_phone2@1_5x.png
│   │   │   ├── relaymedia_phone2@1x.png
│   │   │   ├── slate_logo.png
│   │   │   ├── slate_phone1.png
│   │   │   ├── slate_phone1@1_5x.png
│   │   │   ├── slate_phone1@1x.png
│   │   │   ├── slate_phone2.png
│   │   │   ├── slate_phone2@1_5x.png
│   │   │   ├── slate_phone2@1x.png
│   │   │   ├── slate_thumb.jpg
│   │   │   ├── slate.pdf
│   │   │   ├── teads_logo.png
│   │   │   ├── teads_logo2.png
│   │   │   ├── teads_phone.png
│   │   │   ├── teads_phone@1_5x.png
│   │   │   ├── teads_phone@1x.png
│   │   │   ├── teads_thumb.jpg
│   │   │   ├── teads.pdf
│   │   │   ├── terra_framed1.png
│   │   │   ├── terra_framed2.png
│   │   │   ├── terra_logo.png
│   │   │   ├── terra_thumb.jpg
│   │   │   ├── terra.pdf
│   │   │   ├── wapo_logo.png
│   │   │   ├── wapo_thumb.png
│   │   │   ├── wapo.pdf
│   │   │   ├── washingtonpost_phone.png
│   │   │   ├── washingtonpost_phone@1_5x.png
│   │   │   ├── washingtonpost_phone@1x.png
│   │   │   ├── wired_logo.png
│   │   │   ├── wired_phone1.png
│   │   │   ├── wired_phone1@1_5x.png
│   │   │   ├── wired_phone1@1x.png
│   │   │   ├── wired_phone2.png
│   │   │   ├── wired_phone2@1_5x.png
│   │   │   ├── wired_phone2@1x.png
│   │   │   ├── wired_thumb.jpg
│   │   │   └── wired.pdf
│   │   ├── cheveron-down.svg
│   │   ├── close.svg
│   │   ├── comment.png
│   │   ├── docs
│   │   │   ├── icon_important.svg
│   │   │   ├── icon_note.svg
│   │   │   ├── icon_read.svg
│   │   │   ├── icon_tip.svg
│   │   │   ├── responsive_amp_img.png
│   │   │   ├── too_much_css.png
│   │   │   ├── validator_console_imgerror.png
│   │   │   ├── validator_errors.png
│   │   │   ├── validator_extension_imgerror.png
│   │   │   ├── validator_icon_invalid.png
│   │   │   ├── validator_icon_link.png
│   │   │   ├── validator_icon_valid.png
│   │   │   ├── validator_mandatory_error.png
│   │   │   ├── validator_web_ui.png
│   │   │   └── validator_webui_imgerror.png
│   │   ├── enforce-comment.png
│   │   ├── footer
│   │   │   ├── line-left.png
│   │   │   ├── line-right-2.png
│   │   │   └── line-right.png
│   │   ├── github.png
│   │   ├── hamburger.svg
│   │   ├── home
│   │   │   ├── bg_experience.png
│   │   │   ├── home_hero_phone.png
│   │   │   ├── home_hero_phone@1_5x.png
│   │   │   ├── home_hero_phone@1x.png
│   │   │   ├── home_icon_flexibility.svg
│   │   │   ├── home_icon_performance.svg
│   │   │   ├── home_phone_ebay.png
│   │   │   ├── home_phone_ebay@1_5x.png
│   │   │   ├── home_phone_ebay@1x.png
│   │   │   ├── lines2.svg
│   │   │   ├── lines3.svg
│   │   │   ├── shapebg.svg
│   │   │   ├── teads_logo.svg
│   │   │   ├── wapo_logo.png
│   │   │   └── wired_logo.png
│   │   ├── ic_open_in_new_black.svg
│   │   ├── ic_open_in_new_white.svg
│   │   ├── icons
│   │   │   ├── 120.png
│   │   │   ├── 144.png
│   │   │   ├── 152.png
│   │   │   ├── 168.png
│   │   │   ├── 180.png
│   │   │   ├── 192.png
│   │   │   ├── 48.png
│   │   │   ├── 512.png
│   │   │   ├── 72.png
│   │   │   ├── 96.png
│   │   │   └── any.svg
│   │   ├── latest
│   │   │   ├── events
│   │   │   │   ├── event_empty.png
│   │   │   │   ├── event_empty.svg
│   │   │   │   └── event_hero.svg
│   │   │   ├── icon_audience.png
│   │   │   ├── icon_audience.svg
│   │   │   ├── icon_calendar.png
│   │   │   ├── icon_calendar.svg
│   │   │   ├── icon_location.png
│   │   │   ├── icon_location.svg
│   │   │   ├── icon_retweet.png
│   │   │   ├── icon_retweet.svg
│   │   │   ├── icon_twitter.svg
│   │   │   ├── latest_hero.jpg
│   │   │   ├── line_hero_back.svg
│   │   │   └── line_hero_front.svg
│   │   ├── liveblog-pagination.png
│   │   ├── login-button.png
│   │   ├── logo-blue.svg
│   │   ├── logout-button.png
│   │   ├── malte.jpg
│   │   ├── motions
│   │   │   └── amp-lines-motions.png
│   │   ├── nav
│   │   │   ├── back_arrow.png
│   │   │   ├── back_arrow.svg
│   │   │   ├── close.png
│   │   │   ├── close.svg
│   │   │   ├── next_level.png
│   │   │   └── next_level.svg
│   │   ├── partners
│   │   │   ├── adobe_analytics.png
│   │   │   ├── chartbeat.png
│   │   │   ├── comscore.png
│   │   │   ├── ggl_bw.png
│   │   │   ├── ggl.png
│   │   │   ├── li.png
│   │   │   ├── nuzzel.png
│   │   │   ├── parsely.png
│   │   │   ├── pinterest.png
│   │   │   ├── tw.png
│   │   │   └── wp.png
│   │   ├── platforms
│   │   │   ├── chrome.png
│   │   │   ├── criteo.png
│   │   │   ├── edge.png
│   │   │   ├── firefox.png
│   │   │   ├── google.png
│   │   │   ├── inmobi.png
│   │   │   ├── kargo.png
│   │   │   ├── mediavine.png
│   │   │   ├── opera.png
│   │   │   ├── plista.png
│   │   │   ├── safari.png
│   │   │   └── yahoo.png
│   │   ├── publishers
│   │   │   ├── abril.png
│   │   │   ├── asahi.png
│   │   │   ├── atlantic_media.png
│   │   │   ├── bbc_news.png
│   │   │   ├── buzzfeed.png
│   │   │   ├── condenast.png
│   │   │   ├── daily_mail.png
│   │   │   ├── economist.png
│   │   │   ├── editora_globo.png
│   │   │   ├── el_pais.png
│   │   │   ├── fairfax_media.png
│   │   │   ├── folha_de_s.paulo.png
│   │   │   ├── franzfurter_allgemeine.png
│   │   │   ├── ft.png
│   │   │   ├── gannett.png
│   │   │   ├── guardian.png
│   │   │   ├── hearst.png
│   │   │   ├── huffington_post.png
│   │   │   ├── la_stampa.png
│   │   │   ├── les_echos.png
│   │   │   ├── mainichi.png
│   │   │   ├── mashable.png
│   │   │   ├── mcclatchy.png
│   │   │   ├── new_york_times.png
│   │   │   ├── newscorp_australia.png
│   │   │   ├── nine_msn.png
│   │   │   ├── nrc.png
│   │   │   ├── ny_daily_news.png
│   │   │   ├── nypost.png
│   │   │   ├── pearson.png
│   │   │   ├── sankei.png
│   │   │   ├── telegraph.png
│   │   │   ├── time.png
│   │   │   ├── uol.png
│   │   │   ├── us_news.png
│   │   │   ├── vox_media.png
│   │   │   ├── wallstreetjournal.png
│   │   │   ├── washington_post.png
│   │   │   └── zeit_online.png
│   │   ├── quotes
│   │   │   ├── chartbeat.jpg
│   │   │   ├── ebay.jpg
│   │   │   ├── faz.jpg
│   │   │   ├── folha.jpg
│   │   │   ├── google.jpg
│   │   │   ├── guardian.jpg
│   │   │   ├── hearst.jpg
│   │   │   ├── lastampa.jpg
│   │   │   ├── newyorktimes.jpeg
│   │   │   ├── twitter.jpg
│   │   │   └── vox.jpg
│   │   ├── return-parameter.png
│   │   ├── sprite.svg
│   │   ├── symbols
│   │   │   ├── carat-down.svg
│   │   │   ├── carat.svg
│   │   │   ├── caret-right.svg
│   │   │   ├── close.svg
│   │   │   ├── lang-icon.svg
│   │   │   ├── logo-blue-standalone.svg
│   │   │   ├── return.svg
│   │   │   ├── search.svg
│   │   │   ├── share-close.svg
│   │   │   ├── share.svg
│   │   │   ├── template.scss
│   │   │   ├── twitter.svg
│   │   │   ├── video-play.svg
│   │   │   └── wordpress.svg
│   │   └── twitter.png
│   ├── manifest.json
│   ├── sass
│   │   ├── _accordions.scss
│   │   ├── _animated_lines.scss
│   │   ├── _animations.scss
│   │   ├── _bg-triangle.scss
│   │   ├── _callouts.scss
│   │   ├── _cards.scss
│   │   ├── _carousel.scss
│   │   ├── _config.scss
│   │   ├── _content-post.scss
│   │   ├── _content-section.scss
│   │   ├── _content.scss
│   │   ├── _doc-nav.scss
│   │   ├── _footer.scss
│   │   ├── _global.scss
│   │   ├── _grid.scss
│   │   ├── _header.scss
│   │   ├── _inline-toc.scss
│   │   ├── _lang_switcher.scss
│   │   ├── _large-cta.scss
│   │   ├── _lightbox.scss
│   │   ├── _mixins.scss
│   │   ├── _nav.scss
│   │   ├── _points.scss
│   │   ├── _post-item.scss
│   │   ├── _responsive.scss
│   │   ├── _search.scss
│   │   ├── _share.scss
│   │   ├── _sidebar.scss
│   │   ├── _sprite_generated.scss
│   │   ├── _sprite.scss
│   │   ├── _syntax_highlighting.scss
│   │   ├── _tables.scss
│   │   ├── _toc.scss
│   │   ├── about-how.min.scss
│   │   ├── about-overview.min.scss
│   │   ├── about-who-vertical.min.scss
│   │   ├── about-who.min.scss
│   │   ├── blog.min.scss
│   │   ├── case-study.min.scss
│   │   ├── design-principles.min.scss
│   │   ├── docs.min.scss
│   │   ├── home.min.scss
│   │   ├── list.min.scss
│   │   ├── main.min.scss
│   │   ├── pages
│   │   │   ├── _about-how.scss
│   │   │   ├── _about-overview.scss
│   │   │   ├── _about-who-vertical.scss
│   │   │   ├── _about-who.scss
│   │   │   ├── _case-study.scss
│   │   │   ├── _design-principles.scss
│   │   │   ├── _events.scss
│   │   │   ├── _faqs.scss
│   │   │   ├── _home.scss
│   │   │   ├── _latest.scss
│   │   │   ├── _list.scss
│   │   │   ├── _post-detail.scss
│   │   │   ├── _roadmap.scss
│   │   │   ├── _who.scss
│   │   │   └── amp-conf.scss
│   │   └── section.min.scss
│   └── video
│       ├── amp-phone.mp4
│       └── amp-phone.webm
├── content
│   ├── contribute
│   │   └── governance.md
│   ├── docs
│   │   ├── _blueprint.yaml
│   │   ├── blank.html
│   │   ├── build.md
│   │   ├── contribute
│   │   │   ├── _blueprint.yaml
│   │   │   ├── contribute.md
│   │   │   ├── contribute@ar.md
│   │   │   ├── contribute@de.md
│   │   │   ├── contribute@es.md
│   │   │   ├── contribute@fr.md
│   │   │   ├── file-a-bug.md
│   │   │   └── github.md
│   │   ├── contribute.md
│   │   ├── get_started
│   │   │   ├── _blueprint.yaml
│   │   │   ├── create
│   │   │   │   ├── _blueprint.yaml
│   │   │   │   ├── basic_markup.md
│   │   │   │   ├── basic_markup@ar.md
│   │   │   │   ├── basic_markup@de.md
│   │   │   │   ├── basic_markup@es.md
│   │   │   │   ├── basic_markup@fr.md
│   │   │   │   ├── basic_markup@id.md
│   │   │   │   ├── basic_markup@it.md
│   │   │   │   ├── basic_markup@ja.md
│   │   │   │   ├── basic_markup@ko.md
│   │   │   │   ├── basic_markup@pl.md
│   │   │   │   ├── basic_markup@pt_BR.md
│   │   │   │   ├── basic_markup@ru.md
│   │   │   │   ├── basic_markup@th.md
│   │   │   │   ├── basic_markup@tr.md
│   │   │   │   ├── basic_markup@zh_CN.md
│   │   │   │   ├── include_image.md
│   │   │   │   ├── include_image@ar.md
│   │   │   │   ├── include_image@de.md
│   │   │   │   ├── include_image@es.md
│   │   │   │   ├── include_image@fr.md
│   │   │   │   ├── include_image@id.md
│   │   │   │   ├── include_image@it.md
│   │   │   │   ├── include_image@ja.md
│   │   │   │   ├── include_image@ko.md
│   │   │   │   ├── include_image@pl.md
│   │   │   │   ├── include_image@pt_BR.md
│   │   │   │   ├── include_image@ru.md
│   │   │   │   ├── include_image@th.md
│   │   │   │   ├── include_image@tr.md
│   │   │   │   ├── include_image@zh_CN.md
│   │   │   │   ├── prepare_for_discovery.md
│   │   │   │   ├── prepare_for_discovery@ar.md
│   │   │   │   ├── prepare_for_discovery@de.md
│   │   │   │   ├── prepare_for_discovery@es.md
│   │   │   │   ├── prepare_for_discovery@fr.md
│   │   │   │   ├── prepare_for_discovery@id.md
│   │   │   │   ├── prepare_for_discovery@it.md
│   │   │   │   ├── prepare_for_discovery@ja.md
│   │   │   │   ├── prepare_for_discovery@ko.md
│   │   │   │   ├── prepare_for_discovery@pl.md
│   │   │   │   ├── prepare_for_discovery@pt_BR.md
│   │   │   │   ├── prepare_for_discovery@ru.md
│   │   │   │   ├── prepare_for_discovery@th.md
│   │   │   │   ├── prepare_for_discovery@tr.md
│   │   │   │   ├── prepare_for_discovery@zh_CN.md
│   │   │   │   ├── presentation_layout.md
│   │   │   │   ├── presentation_layout@ar.md
│   │   │   │   ├── presentation_layout@de.md
│   │   │   │   ├── presentation_layout@es.md
│   │   │   │   ├── presentation_layout@fr.md
│   │   │   │   ├── presentation_layout@id.md
│   │   │   │   ├── presentation_layout@it.md
│   │   │   │   ├── presentation_layout@ja.md
│   │   │   │   ├── presentation_layout@ko.md
│   │   │   │   ├── presentation_layout@pl.md
│   │   │   │   ├── presentation_layout@pt_BR.md
│   │   │   │   ├── presentation_layout@ru.md
│   │   │   │   ├── presentation_layout@th.md
│   │   │   │   ├── presentation_layout@tr.md
│   │   │   │   ├── presentation_layout@zh_CN.md
│   │   │   │   ├── preview_and_validate.md
│   │   │   │   ├── preview_and_validate@ar.md
│   │   │   │   ├── preview_and_validate@de.md
│   │   │   │   ├── preview_and_validate@es.md
│   │   │   │   ├── preview_and_validate@fr.md
│   │   │   │   ├── preview_and_validate@id.md
│   │   │   │   ├── preview_and_validate@it.md
│   │   │   │   ├── preview_and_validate@ja.md
│   │   │   │   ├── preview_and_validate@ko.md
│   │   │   │   ├── preview_and_validate@pl.md
│   │   │   │   ├── preview_and_validate@pt_BR.md
│   │   │   │   ├── preview_and_validate@ru.md
│   │   │   │   ├── preview_and_validate@th.md
│   │   │   │   ├── preview_and_validate@tr.md
│   │   │   │   ├── preview_and_validate@zh_CN.md
│   │   │   │   ├── publish.md
│   │   │   │   ├── publish@ar.md
│   │   │   │   ├── publish@de.md
│   │   │   │   ├── publish@es.md
│   │   │   │   ├── publish@fr.md
│   │   │   │   ├── publish@id.md
│   │   │   │   ├── publish@it.md
│   │   │   │   ├── publish@ja.md
│   │   │   │   ├── publish@ko.md
│   │   │   │   ├── publish@pl.md
│   │   │   │   ├── publish@pt_BR.md
│   │   │   │   ├── publish@ru.md
│   │   │   │   ├── publish@th.md
│   │   │   │   ├── publish@tr.md
│   │   │   │   └── publish@zh_CN.md
│   │   │   ├── create.md
│   │   │   ├── create@ar.md
│   │   │   ├── create@de.md
│   │   │   ├── create@es.md
│   │   │   ├── create@fr.md
│   │   │   ├── create@id.md
│   │   │   ├── create@it.md
│   │   │   ├── create@ja.md
│   │   │   ├── create@ko.md
│   │   │   ├── create@pl.md
│   │   │   ├── create@pt_BR.md
│   │   │   ├── create@ru.md
│   │   │   ├── create@th.md
│   │   │   ├── create@tr.md
│   │   │   ├── create@zh_CN.md
│   │   │   ├── live_blog.md
│   │   │   ├── live_blog@ko.md
│   │   │   ├── login_requiring
│   │   │   │   ├── _blueprint.yaml
│   │   │   │   ├── add_comment.md
│   │   │   │   ├── add_comment@ko.md
│   │   │   │   ├── login.md
│   │   │   │   ├── login@ko.md
│   │   │   │   ├── logout.md
│   │   │   │   ├── logout@ko.md
│   │   │   │   ├── summary.md
│   │   │   │   └── summary@ko.md
│   │   │   ├── login_requiring.md
│   │   │   └── login_requiring@ko.md
│   │   ├── getting-started.md
│   │   ├── guides
│   │   │   ├── _blueprint.yaml
│   │   │   ├── author_develop
│   │   │   │   ├── _blueprint.yaml
│   │   │   │   ├── ads_on_amp
│   │   │   │   │   ├── _blueprint.yaml
│   │   │   │   │   ├── ads_getting_started.md
│   │   │   │   │   ├── ads_getting_started@ko.md
│   │   │   │   │   ├── ads_tips.md
│   │   │   │   │   └── ads_tips@ko.md
│   │   │   │   ├── ads_on_amp.md
│   │   │   │   ├── ads_on_amp@ko.md
│   │   │   │   ├── amp_replacements.md
│   │   │   │   ├── amp_replacements@ko.md
│   │   │   │   ├── iframes.md
│   │   │   │   ├── iframes@ko.md
│   │   │   │   ├── responsive_amp
│   │   │   │   │   ├── _blueprint.yaml
│   │   │   │   │   ├── art_direction.md
│   │   │   │   │   ├── art_direction@ko.md
│   │   │   │   │   ├── control_layout.md
│   │   │   │   │   ├── control_layout@ar.md
│   │   │   │   │   ├── control_layout@de.md
│   │   │   │   │   ├── control_layout@es.md
│   │   │   │   │   ├── control_layout@fr.md
│   │   │   │   │   ├── control_layout@id.md
│   │   │   │   │   ├── control_layout@it.md
│   │   │   │   │   ├── control_layout@ja.md
│   │   │   │   │   ├── control_layout@ko.md
│   │   │   │   │   ├── control_layout@pl.md
│   │   │   │   │   ├── control_layout@pt_BR.md
│   │   │   │   │   ├── control_layout@ru.md
│   │   │   │   │   ├── control_layout@th.md
│   │   │   │   │   ├── control_layout@tr.md
│   │   │   │   │   ├── control_layout@zh_CN.md
│   │   │   │   │   ├── custom_fonts.md
│   │   │   │   │   ├── custom_fonts@ko.md
│   │   │   │   │   ├── placeholders.md
│   │   │   │   │   ├── placeholders@ko.md
│   │   │   │   │   ├── style_pages.md
│   │   │   │   │   ├── style_pages@ar.md
│   │   │   │   │   ├── style_pages@de.md
│   │   │   │   │   ├── style_pages@es.md
│   │   │   │   │   ├── style_pages@fr.md
│   │   │   │   │   ├── style_pages@id.md
│   │   │   │   │   ├── style_pages@it.md
│   │   │   │   │   ├── style_pages@ja.md
│   │   │   │   │   ├── style_pages@ko.md
│   │   │   │   │   ├── style_pages@pl.md
│   │   │   │   │   ├── style_pages@pt_BR.md
│   │   │   │   │   ├── style_pages@ru.md
│   │   │   │   │   ├── style_pages@th.md
│   │   │   │   │   ├── style_pages@tr.md
│   │   │   │   │   └── style_pages@zh_CN.md
│   │   │   │   ├── responsive_amp.md
│   │   │   │   ├── responsive_amp@ar.md
│   │   │   │   ├── responsive_amp@de.md
│   │   │   │   ├── responsive_amp@es.md
│   │   │   │   ├── responsive_amp@fr.md
│   │   │   │   ├── responsive_amp@id.md
│   │   │   │   ├── responsive_amp@it.md
│   │   │   │   ├── responsive_amp@ja.md
│   │   │   │   ├── responsive_amp@ko.md
│   │   │   │   ├── responsive_amp@pl.md
│   │   │   │   ├── responsive_amp@pt_BR.md
│   │   │   │   ├── responsive_amp@ru.md
│   │   │   │   ├── responsive_amp@th.md
│   │   │   │   ├── responsive_amp@tr.md
│   │   │   │   ├── responsive_amp@zh_CN.md
│   │   │   │   ├── third_party_components.md
│   │   │   │   ├── third_party_components@ar.md
│   │   │   │   ├── third_party_components@de.md
│   │   │   │   ├── third_party_components@es.md
│   │   │   │   ├── third_party_components@fr.md
│   │   │   │   ├── third_party_components@id.md
│   │   │   │   ├── third_party_components@it.md
│   │   │   │   ├── third_party_components@ja.md
│   │   │   │   ├── third_party_components@ko.md
│   │   │   │   ├── third_party_components@pl.md
│   │   │   │   ├── third_party_components@pt_BR.md
│   │   │   │   ├── third_party_components@ru.md
│   │   │   │   ├── third_party_components@th.md
│   │   │   │   ├── third_party_components@tr.md
│   │   │   │   └── third_party_components@zh_CN.md
│   │   │   ├── author_develop.md
│   │   │   ├── debug
│   │   │   │   ├── _blueprint.yaml
│   │   │   │   ├── validate.md
│   │   │   │   ├── validate@ar.md
│   │   │   │   ├── validate@de.md
│   │   │   │   ├── validate@es.md
│   │   │   │   ├── validate@fr.md
│   │   │   │   ├── validate@id.md
│   │   │   │   ├── validate@it.md
│   │   │   │   ├── validate@ja.md
│   │   │   │   ├── validate@ko.md
│   │   │   │   ├── validate@pl.md
│   │   │   │   ├── validate@pt_BR.md
│   │   │   │   ├── validate@ru.md
│   │   │   │   ├── validate@th.md
│   │   │   │   ├── validate@tr.md
│   │   │   │   └── validate@zh_CN.md
│   │   │   ├── debug.md
│   │   │   ├── deploy
│   │   │   │   ├── _blueprint.yaml
│   │   │   │   ├── analytics_amp
│   │   │   │   │   ├── _blueprint.yaml
│   │   │   │   │   ├── analytics_basics.md
│   │   │   │   │   ├── analytics_basics@ar.md
│   │   │   │   │   ├── analytics_basics@de.md
│   │   │   │   │   ├── analytics_basics@es.md
│   │   │   │   │   ├── analytics_basics@fr.md
│   │   │   │   │   ├── analytics_basics@id.md
│   │   │   │   │   ├── analytics_basics@it.md
│   │   │   │   │   ├── analytics_basics@ja.md
│   │   │   │   │   ├── analytics_basics@ko.md
│   │   │   │   │   ├── analytics_basics@pl.md
│   │   │   │   │   ├── analytics_basics@pt_BR.md
│   │   │   │   │   ├── analytics_basics@ru.md
│   │   │   │   │   ├── analytics_basics@th.md
│   │   │   │   │   ├── analytics_basics@tr.md
│   │   │   │   │   ├── analytics_basics@zh_CN.md
│   │   │   │   │   ├── deep_dive_analytics.md
│   │   │   │   │   ├── deep_dive_analytics@ar.md
│   │   │   │   │   ├── deep_dive_analytics@de.md
│   │   │   │   │   ├── deep_dive_analytics@es.md
│   │   │   │   │   ├── deep_dive_analytics@fr.md
│   │   │   │   │   ├── deep_dive_analytics@id.md
│   │   │   │   │   ├── deep_dive_analytics@it.md
│   │   │   │   │   ├── deep_dive_analytics@ja.md
│   │   │   │   │   ├── deep_dive_analytics@ko.md
│   │   │   │   │   ├── deep_dive_analytics@pl.md
│   │   │   │   │   ├── deep_dive_analytics@pt_BR.md
│   │   │   │   │   ├── deep_dive_analytics@ru.md
│   │   │   │   │   ├── deep_dive_analytics@th.md
│   │   │   │   │   ├── deep_dive_analytics@tr.md
│   │   │   │   │   ├── deep_dive_analytics@zh_CN.md
│   │   │   │   │   ├── use_cases.md
│   │   │   │   │   ├── use_cases@ar.md
│   │   │   │   │   ├── use_cases@de.md
│   │   │   │   │   ├── use_cases@es.md
│   │   │   │   │   ├── use_cases@fr.md
│   │   │   │   │   ├── use_cases@id.md
│   │   │   │   │   ├── use_cases@it.md
│   │   │   │   │   ├── use_cases@ja.md
│   │   │   │   │   ├── use_cases@ko.md
│   │   │   │   │   ├── use_cases@pl.md
│   │   │   │   │   ├── use_cases@pt_BR.md
│   │   │   │   │   ├── use_cases@ru.md
│   │   │   │   │   ├── use_cases@th.md
│   │   │   │   │   ├── use_cases@tr.md
│   │   │   │   │   └── use_cases@zh_CN.md
│   │   │   │   ├── analytics_amp.md
│   │   │   │   ├── analytics_amp@ar.md
│   │   │   │   ├── analytics_amp@de.md
│   │   │   │   ├── analytics_amp@es.md
│   │   │   │   ├── analytics_amp@fr.md
│   │   │   │   ├── analytics_amp@id.md
│   │   │   │   ├── analytics_amp@it.md
│   │   │   │   ├── analytics_amp@ja.md
│   │   │   │   ├── analytics_amp@ko.md
│   │   │   │   ├── analytics_amp@pl.md
│   │   │   │   ├── analytics_amp@pt_BR.md
│   │   │   │   ├── analytics_amp@ru.md
│   │   │   │   ├── analytics_amp@th.md
│   │   │   │   ├── analytics_amp@tr.md
│   │   │   │   ├── analytics_amp@zh_CN.md
│   │   │   │   ├── discovery.md
│   │   │   │   ├── discovery@ar.md
│   │   │   │   ├── discovery@de.md
│   │   │   │   ├── discovery@es.md
│   │   │   │   ├── discovery@fr.md
│   │   │   │   ├── discovery@id.md
│   │   │   │   ├── discovery@it.md
│   │   │   │   ├── discovery@ja.md
│   │   │   │   ├── discovery@ko.md
│   │   │   │   ├── discovery@pl.md
│   │   │   │   ├── discovery@pt_BR.md
│   │   │   │   ├── discovery@ru.md
│   │   │   │   ├── discovery@th.md
│   │   │   │   ├── discovery@tr.md
│   │   │   │   ├── discovery@zh_CN.md
│   │   │   │   ├── engagement.md
│   │   │   │   └── engagement@ko.md
│   │   │   ├── deploy.md
│   │   │   └── embed
│   │   │       ├── _blueprint.yaml
│   │   │       └── login-paywalls.md
│   │   ├── guides.md
│   │   ├── reference
│   │   │   ├── _blueprint.yaml
│   │   │   ├── common_attributes.md
│   │   │   ├── components
│   │   │   │   ├── _blueprint.yaml
│   │   │   │   ├── ads-analytics
│   │   │   │   │   └── _blueprint.yaml
│   │   │   │   ├── dynamic-content
│   │   │   │   │   └── _blueprint.yaml
│   │   │   │   ├── layout
│   │   │   │   │   └── _blueprint.yaml
│   │   │   │   ├── media
│   │   │   │   │   └── _blueprint.yaml
│   │   │   │   ├── presentation
│   │   │   │   │   └── _blueprint.yaml
│   │   │   │   └── social
│   │   │   │       └── _blueprint.yaml
│   │   │   ├── components.md
│   │   │   ├── experimental.md
│   │   │   ├── experimental@ar.md
│   │   │   ├── experimental@de.md
│   │   │   ├── experimental@es.md
│   │   │   ├── experimental@fr.md
│   │   │   ├── experimental@id.md
│   │   │   ├── experimental@it.md
│   │   │   ├── experimental@ja.md
│   │   │   ├── experimental@pl.md
│   │   │   ├── experimental@pt_BR.md
│   │   │   ├── experimental@ru.md
│   │   │   ├── experimental@th.md
│   │   │   ├── experimental@tr.md
│   │   │   ├── experimental@zh_CN.md
│   │   │   ├── validation_errors.md
│   │   │   ├── validation_errors@ar.md
│   │   │   ├── validation_errors@de.md
│   │   │   ├── validation_errors@es.md
│   │   │   ├── validation_errors@fr.md
│   │   │   ├── validation_errors@id.md
│   │   │   ├── validation_errors@it.md
│   │   │   ├── validation_errors@ja.md
│   │   │   ├── validation_errors@pl.md
│   │   │   ├── validation_errors@pt_BR.md
│   │   │   ├── validation_errors@ru.md
│   │   │   ├── validation_errors@th.md
│   │   │   ├── validation_errors@tr.md
│   │   │   └── validation_errors@zh_CN.md
│   │   ├── reference.md
│   │   └── tutorials.md
│   ├── includes
│   │   ├── _blueprint.yaml
│   │   ├── amp-conf-2017.yaml
│   │   ├── amp-iframe.md
│   │   ├── blog_feed.yaml
│   │   ├── doc.yaml
│   │   ├── events.yaml
│   │   ├── home.yaml
│   │   ├── html-example.md
│   │   ├── latest.yaml
│   │   ├── list-blog.yaml
│   │   ├── lists.yaml
│   │   ├── menu.yaml
│   │   ├── roadmap.yaml
│   │   └── tweets.yaml
│   ├── latest
│   │   ├── _blueprint.yaml
│   │   ├── blog
│   │   │   ├── _blueprint.yaml
│   │   │   ├── 1056.md
│   │   │   ├── ads-on-the-web-will-get-better-with-amp-heres-how.md
│   │   │   ├── amp-roadmap-update-for-mid-q1-2017.md
│   │   │   ├── amp-up-for-amp-conf-2017.md
│   │   │   ├── grow-your-business-with-ads-on-amp.md
│   │   │   ├── new-default-placeholders-for-ads-in-amp.md
│   │   │   ├── new-industry-benchmarks-for-mobile-page-speed.md
│   │   │   ├── speeding-up-news-apps-with-amp.md
│   │   │   ├── whats-in-an-amp-url.md
│   │   │   └── why-amp-caches-exist.md
│   │   ├── latest.html
│   │   ├── list-blog.html
│   │   ├── list-event.html
│   │   ├── list-past-event.html
│   │   └── roadmap.html
│   ├── learn
│   │   ├── _blueprint.yaml
│   │   ├── about-amp.md
│   │   ├── about-amp@ar.md
│   │   ├── about-amp@de.md
│   │   ├── about-amp@es.md
│   │   ├── about-amp@fr.md
│   │   ├── about-amp@id.md
│   │   ├── about-amp@it.md
│   │   ├── about-amp@ja.md
│   │   ├── about-amp@ko.md
│   │   ├── about-amp@pl.md
│   │   ├── about-amp@pt_BR.md
│   │   ├── about-amp@ru.md
│   │   ├── about-amp@th.md
│   │   ├── about-amp@tr.md
│   │   ├── about-amp@zh_CN.md
│   │   ├── about-how.yaml
│   │   ├── about-how@ar.yaml
│   │   ├── about-how@es.yaml
│   │   ├── about-how@fr.yaml
│   │   ├── about-how@id.yaml
│   │   ├── about-how@it.yaml
│   │   ├── about-how@ja.yaml
│   │   ├── about-how@ko.yaml
│   │   ├── about-how@pl.yaml
│   │   ├── about-how@pt_BR.yaml
│   │   ├── about-how@ru.yaml
│   │   ├── about-how@th.yaml
│   │   ├── about-how@tr.yaml
│   │   ├── about-how@zh_CN.yaml
│   │   ├── amp-design-principles.yaml
│   │   ├── browsers.md
│   │   ├── case-studies
│   │   │   ├── _blueprint.yaml
│   │   │   ├── category
│   │   │   │   ├── _blueprint.yaml
│   │   │   │   ├── advertisers.md
│   │   │   │   └── publishers.md
│   │   │   ├── gizmodo.md
│   │   │   ├── hearst.md
│   │   │   ├── milestone.md
│   │   │   ├── plista.md
│   │   │   ├── relay_media.md
│   │   │   ├── slate.md
│   │   │   ├── teads.md
│   │   │   ├── terra.md
│   │   │   ├── washingtonpost.md
│   │   │   └── wired.md
│   │   ├── case-studies.html
│   │   ├── how-amp-works.md
│   │   ├── how-amp-works@ar.md
│   │   ├── how-amp-works@es.md
│   │   ├── how-amp-works@fr.md
│   │   ├── how-amp-works@id.md
│   │   ├── how-amp-works@it.md
│   │   ├── how-amp-works@ja.md
│   │   ├── how-amp-works@ko.md
│   │   ├── how-amp-works@pl.md
│   │   ├── how-amp-works@pt_BR.md
│   │   ├── how-amp-works@ru.md
│   │   ├── how-amp-works@th.md
│   │   ├── how-amp-works@tr.md
│   │   ├── how-amp-works@zh_CN.md
│   │   ├── metrics.html
│   │   ├── overview.yaml
│   │   ├── overview@ar.yaml
│   │   ├── overview@de.yaml
│   │   ├── overview@es.yaml
│   │   ├── overview@fr.yaml
│   │   ├── overview@id.yaml
│   │   ├── overview@it.yaml
│   │   ├── overview@ja.yaml
│   │   ├── overview@ko.yaml
│   │   ├── overview@pl.yaml
│   │   ├── overview@pt_BR.yaml
│   │   ├── overview@ru.yaml
│   │   ├── overview@th.yaml
│   │   ├── overview@tr.yaml
│   │   ├── overview@zh_CN.yaml
│   │   ├── who
│   │   │   ├── _blueprint.yaml
│   │   │   ├── ad-tech-platforms.yaml
│   │   │   ├── advertisers.yaml
│   │   │   ├── amp-ads.yaml
│   │   │   └── publishers.yaml
│   │   └── who-uses-amp.yaml
│   ├── pages
│   │   ├── _blueprint.yaml
│   │   ├── amp-conf-2017
│   │   │   ├── _blueprint.yaml
│   │   │   ├── accessibility.html
│   │   │   └── code-of-conduct.html
│   │   ├── amp-conf-2017.html
│   │   ├── home.html
│   │   ├── how-it-works.html
│   │   └── metrics_chart.html
│   └── support
│       ├── _blueprint.yaml
│       ├── developer
│       │   ├── _blueprint.yaml
│       │   ├── documentation-bug.md
│       │   ├── mailing-list.md
│       │   ├── platform-bug.md
│       │   ├── slack.md
│       │   └── stack-overflow.md
│       ├── developer.md
│       ├── faqs
│       │   ├── _blueprint.yaml
│       │   ├── overview.md
│       │   ├── overview@ar.md
│       │   ├── overview@de.md
│       │   ├── overview@es.md
│       │   ├── overview@fr.md
│       │   ├── overview@id.md
│       │   ├── overview@it.md
│       │   ├── overview@ja.md
│       │   ├── overview@pl.md
│       │   ├── overview@pt_BR.md
│       │   ├── overview@ru.md
│       │   ├── overview@th.md
│       │   ├── overview@tr.md
│       │   ├── overview@zh_CN.md
│       │   ├── platform-involvement.md
│       │   ├── platform-involvement@ar.md
│       │   ├── platform-involvement@de.md
│       │   ├── platform-involvement@es.md
│       │   ├── platform-involvement@fr.md
│       │   ├── platform-involvement@id.md
│       │   ├── platform-involvement@it.md
│       │   ├── platform-involvement@ja.md
│       │   ├── platform-involvement@pl.md
│       │   ├── platform-involvement@pt_BR.md
│       │   ├── platform-involvement@ru.md
│       │   ├── platform-involvement@th.md
│       │   ├── platform-involvement@tr.md
│       │   ├── platform-involvement@zh_CN.md
│       │   ├── publisher-monetization.md
│       │   ├── publisher-monetization@ar.md
│       │   ├── publisher-monetization@de.md
│       │   ├── publisher-monetization@es.md
│       │   ├── publisher-monetization@fr.md
│       │   ├── publisher-monetization@id.md
│       │   ├── publisher-monetization@it.md
│       │   ├── publisher-monetization@ja.md
│       │   ├── publisher-monetization@pl.md
│       │   ├── publisher-monetization@pt_BR.md
│       │   ├── publisher-monetization@ru.md
│       │   ├── publisher-monetization@th.md
│       │   ├── publisher-monetization@tr.md
│       │   ├── publisher-monetization@zh_CN.md
│       │   └── supported-platforms.md
│       ├── faqs.md
│       ├── platform.md
│       ├── support.md
│       ├── vendor
│       │   ├── _blueprint.yaml
│       │   └── amp-certification.md
│       └── vendor.md
├── CONTRIBUTING.md
├── firebase.json
├── gulpfile.js
├── LICENSE
├── npm-shrinkwrap.json
├── package.json
├── podspec.yaml
├── pwa
│   ├── google7199ce9da1ad191b.html
│   ├── pwa.html
│   ├── pwa.js
│   └── service-worker.js
├── README.md
├── scripts
│   ├── component_categories.json
│   ├── import_docs.js
│   ├── import_docs.json
│   ├── update_blog_links.js
│   ├── update_platforms_page.js
│   └── update_tweets.js
├── translations
│   ├── ar
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── de
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── es
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── fr
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── id
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── it
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── ja
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── ko
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── messages.pot
│   ├── pl
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── pt_BR
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── ru
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── th
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   ├── tr
│   │   └── LC_MESSAGES
│   │       └── messages.po
│   └── zh_CN
│       └── LC_MESSAGES
│           └── messages.po
└── views
    ├── about-casestudies.html
    ├── about-how.html
    ├── about-overview.html
    ├── about-who-vertical.html
    ├── about-who.html
    ├── base.html
    ├── blank.html
    ├── blog_detail.html
    ├── case-study.html
    ├── design-principles.html
    ├── doc.html
    ├── grid_page.html
    ├── list_page.html
    ├── partials
    │   ├── breadcrumb-nav.html
    │   ├── doc_nav.html
    │   ├── faq-accordion.html
    │   ├── footer-cta.html
    │   ├── footer.html
    │   ├── grid-card.html
    │   ├── head.html
    │   ├── header.html
    │   ├── lang_switcher.html
    │   ├── large-cta.html
    │   ├── lines.html
    │   ├── nav.html
    │   ├── points.html
    │   ├── post-item.html
    │   ├── promo_banner.html
    │   ├── search.html
    │   ├── share.html
    │   ├── sidebar.html
    │   └── sub_nav.html
    └── section_page.html
```

# Files

--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------

```json
{
  "hosting": {
    "public": "build",
    "cleanUrls": true,
    "headers": [
      {
        "source": "**/*.@(jpg|jpeg|gif|png|svg|mp4)",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "max-age=604800"
          }
        ]
      },
      {
        "source": "service-worker.js",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "no-cache"
          }
        ]
      },
      {
        "source": "/amp-conf-2017/",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "no-cache"
          }
        ]
      },
      {
        "source": "/amp-conf-2017-pwa/",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "no-cache"
          }
        ]
      }
    ],
    "redirects": [
      {
        "source": "/who",
        "destination": "/learn/who/",
        "type": 301
      },
      {
        "source": "/who/",
        "destination": "/learn/who/",
        "type": 301
      },
      {
        "source": "/docs/get_started/technical_overview.html",
        "destination": "/learn/how-amp-works/",
        "type": 301
      },
      {
        "source": "/docs/get_started/about-amp.html",
        "destination": "/learn/overview/",
        "type": 301
      },
      {
        "source": "/docs/guides/responsive_amp?(.html)",
        "destination": "/docs/guides/author-develop/responsive_amp",
        "type": 301
      },
      {
        "source": "/docs/guides/responsive/style_pages?(.html)",
        "destination": "/docs/guides/author-develop/responsive/style_pages.html",
        "type": 301
      },
      {
        "source": "/docs/guides/responsive/control_layout?(.html)",
        "destination": "/docs/guides/author-develop/responsive/control_layout.html",
        "type": 301
      },
      {
        "source": "/docs/guides/responsive/placeholders?(.html)",
        "destination": "/docs/guides/author-develop/responsive/placeholders.html",
        "type": 301
      },
      {
        "source": "/docs/guides/responsive/art_direction?(.html)",
        "destination": "/docs/guides/author-develop/responsive/art_direction.html",
        "type": 301
      },
      {
        "source": "/docs/guides/responsive/custom_fonts?(.html)",
        "destination": "/docs/guides/author-develop/responsive/custom_fonts.html",
        "type": 301
      },
      {
        "source": "/docs/guides/amp_replacements?(.html)",
        "destination": "/docs/guides/author-develop/amp_replacements.html",
        "type": 301
      },
      {
        "source": "/docs/guides/iframes?(.html)",
        "destination": "/docs/guides/author-develop/iframes.html",
        "type": 301
      },
      {
        "source": "/docs/guides/third_party_components?(.html)",
        "destination": "/docs/guides/author-develop/third_party_components.html",
        "type": 301
      },
      {
        "source": "/docs/guides/ads_on_amp?(.html)",
        "destination": "/docs/guides/author-develop/ads_on_amp.html",
        "type": 301
      },
      {
        "source": "/docs/guides/validate?(.html)",
        "destination": "/docs/guides/debug/validate.html",
        "type": 301
      },
      {
        "source": "/docs/guides/analytics_amp?(.html)",
        "destination": "/docs/guides/deploy/analytics_amp.html",
        "type": 301
      },
      {
        "source": "/docs/guides/discovery?(.html)",
        "destination": "/docs/guides/deploy/discovery.html",
        "type": 301
      },
      {
        "source": "/docs/guides/engagement?(.html)",
        "destination": "/docs/guides/deploy/engagement.html",
        "type": 301
      },
      {
        "source": "/docs/guides/login-paywalls",
        "destination": "/docs/get_started/login_requiring",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-pixel?(.html)",
        "destination": "/docs/reference/components/ads/amp-pixel.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-ad?(.html)",
        "destination": "/docs/reference/components/ads/amp-ad.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-analytics?(.html)",
        "destination": "/docs/reference/components/ads/amp-analytics.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-auto-ads?(.html)",
        "destination": "/docs/reference/components/ads/amp-auto-ads.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-call-tracking?(.html)",
        "destination": "/docs/reference/components/ads/amp-call-tracking.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-experiment?(.html)",
        "destination": "/docs/reference/components/ads/amp-experiment.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-sticky-ad?(.html)",
        "destination": "/docs/reference/components/ads/amp-sticky-ad.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-access-laterpay?(.html)",
        "destination": "/docs/reference/components/dynamic/amp-access-laterpay.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-access?(.html)",
        "destination": "/docs/reference/components/dynamic/amp-access.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-bind?(.html)",
        "destination": "/docs/reference/components/dynamic/amp-bind.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-form?(.html)",
        "destination": "/docs/reference/components/dynamic/amp-form.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-install-serviceworker?(.html)",
        "destination": "/docs/reference/components/dynamic/amp-install-serviceworker.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-list?(.html)",
        "destination": "/docs/reference/components/dynamic/amp-list.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-live-list?(.html)",
        "destination": "/docs/reference/components/dynamic/amp-live-list.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-mustache?(.html)",
        "destination": "/docs/reference/components/dynamic/amp-mustache.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-selector?(.html)",
        "destination": "/docs/reference/components/dynamic/amp-selector.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-user-notification?(.html)",
        "destination": "/docs/reference/components/dynamic/amp-user-notification.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-accordion?(.html)",
        "destination": "/docs/reference/components/layout/amp-accordion.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-app-banner?(.html)",
        "destination": "/docs/reference/components/layout/amp-app-banner.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-carousel?(.html)",
        "destination": "/docs/reference/components/layout/amp-carousel.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-fx-flying-carpet?(.html)",
        "destination": "/docs/reference/components/layout/amp-fx-flying-carpet.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-fx-parallax?(.html)",
        "destination": "/docs/reference/components/layout/amp-fx-parallax.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-iframe?(.html)",
        "destination": "/docs/reference/components/layout/amp-iframe.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-lightbox?(.html)",
        "destination": "/docs/reference/components/layout/amp-lightbox.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-sidebar?(.html)",
        "destination": "/docs/reference/components/layout/amp-sidebar.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-img?(.html)",
        "destination": "/docs/reference/components/media/amp-img.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-anim?(.html)",
        "destination": "/docs/reference/components/media/amp-anim.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-apester-media?(.html)",
        "destination": "/docs/reference/components/media/amp-apester-media.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-audio?(.html)",
        "destination": "/docs/reference/components/media/amp-audio.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-brid-player?(.html)",
        "destination": "/docs/reference/components/media/amp-brid-player.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-brightcove?(.html)",
        "destination": "/docs/reference/components/media/amp-brightcove.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-dailymotion?(.html)",
        "destination": "/docs/reference/components/media/amp-dailymotion.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-google-vrview-image?(.html)",
        "destination": "/docs/reference/components/media/amp-google-vrview-image.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-hulu?(.html)",
        "destination": "/docs/reference/components/media/amp-hulu.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-image-lightbox?(.html)",
        "destination": "/docs/reference/components/media/amp-image-lightbox.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-izlesene?(.html)",
        "destination": "/docs/reference/components/media/amp-izlesene.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-jwplayer?(.html)",
        "destination": "/docs/reference/components/media/amp-jwplayer.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-kaltura-player?(.html)",
        "destination": "/docs/reference/components/media/amp-kaltura-player.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-o2-player?(.html)",
        "destination": "/docs/reference/components/media/amp-o2-player.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-ooyala-player?(.html)",
        "destination": "/docs/reference/components/media/amp-ooyala-player.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-playbuzz?(.html)",
        "destination": "/docs/reference/components/media/amp-playbuzz.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-reach-player?(.html)",
        "destination": "/docs/reference/components/media/amp-reach-player.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-soundcloud?(.html)",
        "destination": "/docs/reference/components/media/amp-soundcloud.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-springboard-player?(.html)",
        "destination": "/docs/reference/components/media/amp-springboard-player.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-video?(.html)",
        "destination": "/docs/reference/components/media/amp-video.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-vimeo?(.html)",
        "destination": "/docs/reference/components/media/amp-vimeo.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-youtube?(.html)",
        "destination": "/docs/reference/components/media/amp-youtube.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-animation?(.html)",
        "destination": "/docs/reference/components/presentation/amp-animation.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-dynamic-css-classes?(.html)",
        "destination": "/docs/reference/components/presentation/amp-dynamic-css-classes.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-fit-text?(.html)",
        "destination": "/docs/reference/components/presentation/amp-fit-text.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-font?(.html)",
        "destination": "/docs/reference/components/presentation/amp-font.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-viz-vega?(.html)",
        "destination": "/docs/reference/components/presentation/amp-viz-vega.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-facebook?(.html)",
        "destination": "/docs/reference/components/social/amp-facebook.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-gfycat?(.html)",
        "destination": "/docs/reference/components/social/amp-gfycat.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-instagram?(.html)",
        "destination": "/docs/reference/components/social/amp-instagram.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-pinterest?(.html)",
        "destination": "/docs/reference/components/social/amp-pinterest.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-reddit?(.html)",
        "destination": "/docs/reference/components/social/amp-reddit.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-share-tracking?(.html)",
        "destination": "/docs/reference/components/social/amp-share-tracking.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-social-share?(.html)",
        "destination": "/docs/reference/components/social/amp-social-share.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-twitter?(.html)",
        "destination": "/docs/reference/components/social/amp-twitter.html",
        "type": 301
      },
      {
        "source": "/docs/reference/components/amp-vine?(.html)",
        "destination": "/docs/reference/components/social/amp-vine.html",
        "type": 301
      },
      {
        "source": "/contribute/governance/",
        "destination": "/docs/contribute/governance/",
        "type": 301
      },
      {
        "source": "/docs",
        "destination": "/learn/overview/",
        "type": 301
      },
      {
        "source": "/docs/index.html",
        "destination": "/learn/overview/",
        "type": 301
      },
      {
        "source": "/learn/about-amp/",
        "destination": "/learn/overview/",
        "type": 301
      },
      {
        "source": "/learn/how-amp-works/",
        "destination": "/learn/about-how/",
        "type": 301
      },
      {
        "source": "/learn/design-principles/",
        "destination": "/learn/amp-design-principles/",
        "type": 301
      },
      {
        "source": "/learn/@(browsers|who)/",
        "destination": "/support/faqs/supported-platforms.html",
        "type": 301
      },
      {
        "source": "/docs/support/contribute.html",
        "destination": "/contribute/",
        "type": 301
      },
      {
        "source": "/docs/support/faqs.html",
        "destination": "/support/faqs/",
        "type": 301
      },
      {
        "source": "/docs/reference/amp-ad.html",
        "destination": "/docs/reference/extended/amp-ad.html",
        "type": 301
      },
      {
        "source": "/faq",
        "destination": "/support/faqs/",
        "type": 301
      },
      {
        "source": "/faq/",
        "destination": "/support/faqs/",
        "type": 301
      },
      {
        "source": "/faq/index.html",
        "destination": "/support/faqs/",
        "type": 301
      },
      {
        "source": "/docs/get_started/create_page.html",
        "destination": "/docs/get_started/create.html",
        "type": 301
      },
      {
        "source": "/contact",
        "destination": "https://github.com/ampproject/amphtml/issues/new",
        "type": 301
      },
      {
        "source": "/contact/",
        "destination": "https://github.com/ampproject/amphtml/issues/new",
        "type": 301
      },
      {
        "source": "/contact/",
        "destination": "https://github.com/ampproject/amphtml/issues/new",
        "type": 301
      },
      {
        "source": "/docs/reference/extended.html",
        "destination": "/docs/reference/components.html",
        "type": 301
      },
      {
        "source": "/docs/reference/amp-img.html",
        "destination": "/docs/reference/components/amp-img.html",
        "type": 301
      },
      {
        "source": "/docs/reference/amp-pixel.html",
        "destination": "/docs/reference/components/amp-pixel.html",
        "type": 301
      },
      {
        "source": "/docs/reference/amp-ad.html",
        "destination": "/docs/reference/components/amp-ad.html",
        "type": 301
      },
      {
        "source": "/docs/reference/amp-video.html",
        "destination": "/docs/reference/components/amp-video.html",
        "type": 301
      },
      {
        "source": "/docs/reference/extended/:post*",
        "destination": "/docs/reference/components/:post*",
        "type": 301
      }
    ],
    "ignore": [
      ".grow"
    ]
  }
}

```

--------------------------------------------------------------------------------
/content/includes/amp-conf-2017.yaml:
--------------------------------------------------------------------------------

```yaml
registration_link: https://events.withgoogle.com/amp-conf-2017/registrations/new
speakers:
  davidbesbris:
    name: David Besbris
    company: Google
    pic: /static/img/amp-conf/speakers/bez.jpg
    bio: Bez joined Google in 2008 and leads the Google News, Google Play Newsstand, AMP and Google Search fresh content teams. Before that he's led several other products, including Google+, Google Photos, Gmail and Google Calendar.
  nataliabaltazar:
    name: Natalia Baltazar
    company: The Guardian
    pic: /static/img/amp-conf/speakers/natalia.jpg
    bio: Natalia Baltazar is a full stack software engineer at the Guardian. She works mainly on the theguardian.com, coding in Javascript and Scala. At the Guardian she is the lead developer creating Google AMP versions of article pages and helping spearhead diversity initiatives. Outside of work she organises one-day workshops teaching Node.js with nodegirls.io, is an organiser for Ladies of Code, and volunteers as a mentor for a variety of free coding meetups. In her spare time she focuses on learning new programming languages, furniture refurbishment, and fashion design.
  lewei:
    name: Le Wei
    company: UpperQuad
    twitter: lewei
    pic: /static/img/amp-conf/speakers/le.jpg
    bio: Le is a Senior Developer at Upperquad, a design studio in San Francisco, where she works on a variety of projects for clients such as Google, Github, and Facebook. Most recently she has been working with the AMP team on a redesign of ampproject.org. Prior to UQ, Le was a software engineer at Google.
  willchou:
    name: William Chou
    company: Google
    pic: /static/img/amp-conf/speakers/will.jpg
    bio: William Chou is a Software Engineer who's working on new dynamic content in AMP. William worked in the games industry prior to joining Google.
  alexrussell:
    name: Alex Russell
    company: Google
    pic: /static/img/amp-conf/speakers/alex.jpg
    bio: Alex Russell is a Software Engineer on the Chrome team at Google where he designs new features for the web platform and leads Chrome's Standards work. He's a member of TC39, the committee standardizing ECMAScript/JavaScript, and is an elected member of the W3C’s Technical Architecture Group where he works with a group of like-minded reformers to improve the state of layering and API design for the web. Progressive Web Apps are his jam.
  johnpettitt:
    name: John Pettitt
    company: Relay Media
    pic: /static/img/amp-conf/speakers/john.jpg
    bio: "John is co-founder/CTO of Relay Media, a company dedicated to AMP.  Relay provides automated AMP conversion services for many TV and Newspaper sites. John was VP of engineering for BitTorrent, and co-founder/CTO of Beyond.com and CyberSource. John’s photojournalism has appeared in Wired, Vanity Fair, NY Times, Washington Post, on CNN, and on CBS news.  He's had an Internet email address since 1983."
    twitter: jpp123
  chenshay:
    name: Chen Shay
    company: Google
    pic: /static/img/amp-conf/speakers/chen.jpg
    bio: Chen is a Software Engineer on the AMP Team @ Google. Prior to AMP, Chen worked on Google Saves and most recently, Health Search. Chen launched Health Cards in developing countries, and Google Answers to Health questions. Chen is a Silicon Valley native. She holds a bachelor's degree in Computer Science from UC Santa Barbara and a Master's degree in Computer Science from Ben Gurion University in Israel.
  rannazhou:
    name: Ranna Zhou
    company: Google
    bio: Ranna Zhou is a product manager on Search working to bring information context and summarization of news to users. She studied computer science at MIT and exercises her degree coding for non-profits.
    pic: /static/img/amp-conf/speakers/ranna.jpg
  yaminigupta:
    name: Yamini Gupta
    company: Google
    pic: /static/img/amp-conf/speakers/yamini.jpg
    bio: As Head of Publisher Marketing at Google, Yamini leads marketing programs aimed at helping publishers thrive and create sustainable businesses with advertising. In this role, Yamini drives industry education and product marketing for DoubleClick's mobile, video and programmatic solutions as well as the open source Accelerated Mobile Pages (AMP) project. Yamini has more than 10 years of experience in marketing and advertising and started her career marketing consumer goods at DDB in India. She holds a Bachelor's degree in English Literature from Bombay University, and an MBA from Columbia University in New York.
  vamseejasti:
    name: Vamsee Jasti
    company: Google
    pic: /static/img/amp-conf/speakers/vamsee.jpg
    bio: Vamsee Jasti is the product manager for advertising in AMP. His mission is to keep the web open and free by helping publishers make money without comprising on user experience. The other way he helps publishers is by clicking on every ad he sees on the web.
  matthewprince:
    name: Matthew Prince
    company: Cloudflare
    pic: /static/img/amp-conf/speakers/matthew.jpg
    bio: Matthew Prince is co-founder and CEO of CloudFlare. CloudFlare’s mission is to help build a better Internet. Before CloudFlare, he co-founded Unspam Technologies, an anti-spam startup where he continues to serve as Chairman. Since then, Matthew has been an adjunct professor of law at the John Marshall Law School and co-creator of Project Honey Pot, the largest open source community tracking online fraud and abuse. He is a World Economic Forum Technology Pioneer, winner of the 2011 Tech Fellow Award, and serves on the Board of Advisors for the Center for Information Technology and Privacy Law. Matthew holds an MBA from Harvard Business School where he was a George F. Baker Scholar and awarded the Dubliner Prize for Entrepreneurship. He is a member of the Illinois Bar, and earned his J.D. from the University of Chicago and B.A. from Trinity College.
  daneknecht:
    name: Dane Knecht
    company: Cloudflare
    pic: /static/img/amp-conf/speakers/dane.jpg
  sammeder:
    name: Sam Meder
    company: Pinterest
    pic: /static/img/amp-conf/speakers/sam.jpg
    bio: Sam Meder is a engineer at Pinterest where he is responsible for performance across all platforms. Prior to Pinterest he's been a technical leader and manager at a variety of startups.
  vadimantonov:
    name: Vadim Antonov
    company: Pinterest
    pic: /static/img/amp-conf/speakers/vadim.jpg
    bio: Vadim Antonov is a Tech Lead for the User Acquisition team at Pinterest. Previously, he worked on search at Bing & Yandex, including work on crawling, index quality, query rewriting and ranking.
  beckcronindixon:
    name: Beck Cronin-Dixon
    company: Eventbrite
    pic: /static/img/amp-conf/speakers/beck.jpg
    bio: Beck Cronin-Dixon is an SEO Engineer and lead developer for AMP at Eventbrite. As a Nashville Software School alumni she is passionate about encouraging aspiring coders into engineering careers. Her SEO mantra is ‘search engine optimization and user experience should always go hand in hand’. She is a world traveler who has lived on 4 different continents.
  sarahsaltrickmeyer:
    name: Sarah Saltrick Meyer
    company: Buzzfeed
    pic: /static/img/amp-conf/speakers/sarah.jpg
    bio: Sarah Saltrick Meyer is a native New Yorker, employed as software engineer at BuzzFeed. She likes good websites and the opera. After a career in front-end engineering at all sorts of startups in the New York-Boston corridor, she now builds a modern web experience for BuzzFeed's millions of readers.
  nicolesullivan:
    name: Nicole Sullivan
    company: Salesforce
    pic: /static/img/amp-conf/speakers/nicole.jpg
    bio: Nicole is an Engineering Director at Salesforce and the creator of Object Oriented CSS, Dr Frankenstyle, CSSLint, and CSSConf. Follow her on [Twitter](https://twitter.com/stubbornella), read her [blog](http://www.stubbornella.org/content/).
  jeremykeith:
    name: Jeremy Keith
    company: Clearleft
    pic: /static/img/amp-conf/speakers/jeremy.jpg
    bio: Jeremy Keith is an Irish web developer living in Brighton, England where he co-founded the splendid design agency Clearleft. He wrote the books DOM Scripting, Bulletproof Ajax, HTML5 For Web Designers, and most recently Resilient Web Design. He also organised events like dConstruct, Responsive Day Out, and the world's first Science Hack Day. Jeremy spends most of his time goofing off on the internet, documenting his time-wasting on adactio.com, where he has been writing for over fifteen years.
  ginatrapani:
    name: Gina Trapani
    company: Postlight
    pic: /static/img/amp-conf/speakers/gina.jpg
    bio: Gina Trapani is a writer, podcaster, and Director of Engineering at Postlight, a digital product studio in New York City. Gina helped create Postlight Labs' Mercury AMP Converter, a tool that transforms web pages into AMP with one line of code. Once upon a time, she founded Lifehacker.
  paulbakaus:
    name: Paul Bakaus
    company: Google
    pic: /static/img/amp-conf/speakers/paul.jpg
    bio: Paul Bakaus is a Developer Advocate at Google, heading up outreach for AMP. He assists developers, designers, and filmmakers to create better, faster, more immersive and more convincing digital experiences.
  malteubl:
    name: Malte Ubl
    company: Google
    pic: /static/img/amp-conf/speakers/malte.jpg
    bio: Malte Ubl is the tech lead of the AMP Project. He previously spent 5 years at Google making JavaScript based apps go fast and in his free time, he is one of the co-organizers of JSConf EU.
  rudygalfi:
    name: Rudy Galfi
    company: Google
    pic: /static/img/amp-conf/speakers/rudy.jpg
    bio: Rudy Galfi is the product management lead for the AMP Project since August 2015. He previously spent four years at Google building personalized content recommendation experiences for various Google products and was product manager for Google News. Prior to Google, Rudy was a software engineer at Microsoft.
  senthilpadmanabhan:
    name: Senthil Padmanabhan
    company: eBay
    pic: /static/img/amp-conf/speakers/senthil.jpg
    bio: Senthil Padmanabhan is a Principal Engineer & Web Platform Lead at eBay, building the multiscreen shopping experience. He is specialized in web technologies such as JavaScript, HTML, CSS, along with web performance & optimization.
  ardanarac:
    name: Ardan Arac
    company: Google
    pic: /static/img/amp-conf/speakers/ardan.jpg
    bio: Ardan leads fresh content products in Google search. She has been a product manager at Google since 2006. She studied electrical engineering previously.
  ericlindley:
    name: Eric Lindley
    company: Google
    pic: /static/img/amp-conf/speakers/eric.jpg
    bio: Eric Lindley is a product manager on the AMP Project, focused on format support. Previously at Google he worked on the initial launch of the standalone Google Photos app.
  richardgingras:
    name: Richard Gingras
    company: Google
    pic: /static/img/amp-conf/speakers/richard.jpg
    bio: Richard Gingras is Vice President of News at Google. In that role he guides Google’s strategies relating to the media ecosystem and oversees many of Google’s news and media related products. Richard was a key instigator of the AMP project and was previously co-founder of the Trust Project, a global effort within the journalism community to insure that high quality journalism is recognized for the credibility it deserves.
  sebastianbenz:
    name: Sebastian Benz
    company: Google
    pic: /static/img/amp-conf/speakers/sebastian.jpg
    bio: Sebastian Benz is a Developer Advocate at Google. He created ampbyexample.com and helps partners be more successful on the web and on Android. Sebastian has a PhD in Computer Science from TU Muenchen.
  madisonminer:
    name: Madison Miner
    company: WompMobile
    pic: /static/img/amp-conf/speakers/madison.jpg
    bio: Madison Miner is co-founder of WompMobile, a mobile optimization company that converts complex, e-commerce websites into AMP pages, bringing to life faster, more compelling digital experiences. Madison, a software engineer, is relentless about finding creative ways to create rich functionality, while keeping mobile architecture lean and performant. In his spare time, Madison can be found peddling his bike, meandering through Washington state.
  mikeadler:
    name: Mike Adler
    company: Etsy
    pic: /static/img/amp-conf/speakers/mike.jpg
    bio: Mike Adler is a Staff Software Engineer at Etsy where he focuses on performance matters. Mike likes to build custom monitoring tools to answer tough questions about performance. He hasn't had a personal web site since 1997.
  alighassemi:
    name: Ali Ghassemi
    company: Google
    pic: /static/img/amp-conf/speakers/ali.jpg
  sriramkrishnan:
    name: Sriram Krishnan
    company: Google
    pic: /static/img/amp-conf/speakers/sriram.jpg
  marikokosaka:
    name: Mariko Kosaka
    company: Scripto
    pic: /static/img/amp-conf/speakers/mariko.jpg
  marcelodebarros:
    name: Marcelo De Barros
    company: Microsoft
  zackhendlin:
    name: Zack Hendlin
    company: LinkedIn
  honeymittal:
    name: Honey Mittal
    company: Wego
    pic: /static/img/amp-conf/speakers/honey.jpg
    bio: Honey is Senior Vice President - Product at Wego.com, a search-driven online travel marketplace operating across the Middle East & Asia-Pacific and backed by top-tier investors. He has been working with 'everything mobile' for the last 8 years. The last 3 of them have been at Wego, building Wego's top-ranked mobile apps and more recently with revamping Wego's web products. Having recently launched Wego's new mobile web experience (PWA and AMP Pages), Wego's product & engineering team hopes to share their experience with the community and also learn from others at the AMP Summit!

agenda:
  day_1:
    - title: Registration
      time: "0800"
    - title: Opening notes
      time: "0850"
    - title: Day One Keynote
      time: "0900"
      type: keynote
      speaker: davidbesbris
      description: David Besbris, AMP Project lead, will open the AMP Conf with a look at the past year, present and future of AMP.
    - title: 1B+ Pages AMPed
      time: "0930"
      type: session
      speakers:
        - sammeder
        - vadimantonov
      description: Pinterest has more than a billion pages that are accessible to unauthenticated users and discoverable via Google search. In this talk we will walk through what it took to convert these to AMP and where we are planning to go next.
    - title: AMP in the Wild
      time: "1000"
      type: session
      speaker: nataliabaltazar
      description: Learn how the Guardian turned the limitations of AMP into an opportunity to rethink their article pages, header and navigation and therefore improved their overall user journey.
    - title: Coffee Break
      time: "1030"
    - title: Adding AMP to an e-commerce Workflow
      time: "1100"
      type: session
      speaker: senthilpadmanabhan
      description: eBay is one of the first eCommerce players to launch AMP in production. In this talk we will discuss on how to add AMP to an existing workflow and develop in parallel. We will dive into why we chose AMP, lessons learned, things that are critical for eCommerce and the challenges faced. We will also share some metrics along the way.
    - title: "Beautiful, Canonical, and Responsive AMP Pages"
      time: "1130"
      type: session
      description: Le is the lead developer for the upcoming relaunch of the AMP Project website, and will share lots of lessons learned when building canonical, responsive AMP. She'll also highlight some upcoming AMP features that make it even easier to build attractive AMP Pages.
      speakers:
        - lewei
        - ericlindley
    - title: "Mobile web on flaky networks: When they go slow, Wego fast!"
      time: "1200"
      type: session
      speaker: honeymittal
      description: Delivering an app-like experience to mobile web users on flaky networks has always been a challenge for developers building for both the developed and emerging markets. Until now, that is! Thanks to AMP and PWA, Wego.com has been able to flip their mobile web experience upside down. Come learn about how Wego.com combined the power of both AMP and PWA to create a great end to end mobile web experience with faster acquisition and higher engagement.
    - title: Lunch (with the AMP team!)
      time: "1230"
      description: The AMP team needs sustenance as well, and what better time to grab them to offer feedback and discuss the roadmap. We'll have dedicated tables with project members who want to hear from you.
    - title: "AMP & the web platform"
      time: "1330"
      type: panel
      moderator: paulbakaus
      speakers:
        - jeremykeith
        - nicolesullivan
        - sarahsaltrickmeyer
        - ginatrapani
        - mikeadler
      description: It's hard to argue that AMP improves page speed and usability, but does it actually help the web platform at large or is it just a stop-gap measure? And if it doesn't, how can we fix it? We invited a bunch of advocates for the open web to talk candidly and take a hard look together of where the web is heading, and how we can ensure a healthy open-web for the next generations.
    - title: I can't believe it's AMP!
      time: "1430"
      type: session
      description: Watch Madison, CEO of WompMobile, come up with clever CSS and AMP component production hacks to support all sorts of use-cases, and then marvel at how Sebastian, creator of AMPByExample.com turns a myriad of these and more tricks to create fascinating applications of AMP.
      speakers:
        - madisonminer
        - sebastianbenz
    - title: "Leveraging AMP for e-commerce: Eventbrite’s journey to optimized mobile pages"
      time: "1500"
      type: session
      speaker: beckcronindixon
      description: Eventbrite has seen many wins since launching its event listings pages as AMP. But this journey had its share of technical and design challenges. This discussion will focus on some of those hurdles including accommodating user-generated content, issues specific to ecommerce and ticketing, and structuring HTML and CSS for maintainability. We will detail how Eventbrite  overcame these obstacles without sacrificing user experience or brand alignment.
    - title: Turing complete...AMP Pages?!
      time: "1530"
      type: session
      speaker: willchou
      description: The AMP team has been amazed at the creativity web developers are showing to create interactivity without JS, but we're finally making it a little easier out of the box. Learn how amp-bind, amp-selector, amp-fresh and other exciting new components enable true interactivity.
    - title: Coffee Break
      time: "1600"
    - title: What's next in AMP
      time: "1630"
      type: keynote
      speakers:
        - malteubl
        - rudygalfi
      company: Google
      description: What does the future for AMP look like? Malte Ubl, engineering lead of AMP, and Rudy Galfi, PM on the AMP team, are here to tell you all about it.
    - title: Q&A with Google Search and AMP Leadership
      time: "1700"
      type: panel
      description: It's time to ask the AMP and Google Search leadership all the questions. All keynote speakers as well as a few additional guests from Google Search & News will try their very best to answer every question you throw at them.
      speakers:
        - davidbesbris
        - malteubl
        - rudygalfi
        - richardgingras
        - rannazhou
        - ardanarac
    - title: Party!
      time: "1800"
  day_2:
    - title: Registration
      time: "0800"
    - title: "Day Two Keynote: How Cloudflare is accelerating AMP"
      time: "9000"
      type: keynote
      speaker: matthewprince
      description: Matthew Prince, co-founder and CEO of Cloudflare, opens the second day with his keynote, bringing an exciting outlook on how they're expanding the AMP ecosystem with new Cloudflare-powered solutions.
    - title: "AMP on Google Search: Building the perfect AMP Viewer"
      time: "0930"
      type: session
      speaker: rannazhou
      description: Ranna will talk about how Google Search uses AMP to create experiences like the Top Stories carousel, and how the AMP Viewer works, from top to bottom. It's rare to get a chance to look behind the scenes of Google Search – you don't want to miss this one.
    - title: "Progressive Web AMPs: From AMP to PWA"
      time: "1000"
      type: session
      speaker: alexrussell
      description: AMP gets content in front of users fast – PWAs enable rich experiences and engagement. Learn how to combine the two to get the best of both worlds by the Chrome engineer who coined the term "Progressive Web App".
    - title: Coffee Break
      time: "1030"
    - title: "AMP Conversion: The Good, The Bad and The Ugly"
      time: "1100"
      type: session
      speaker: johnpettitt
      description: Relay Media is converting millions of AMP pages every day, and conversion brings many challenges different than building from scratch. Learn how to compress CSS efficiently, replace functionality smartly and much more.
    - title: "Consuming AMP: The platform panel"
      time: "1130"
      type: panel
      moderator: paulbakaus
      speakers:
       - marcelodebarros
       - zackhendlin
       - daneknecht
      description: Meet the platforms that embed and distribute AMP pages, and learn about their unique challenges, future ideas and more. Featuring an all-star lineup that includes Bing, LinkedIn, Google and more to be announced.
    - title: Lunch (with the AMP team!)
      time: "1230"
      description: The AMP team needs sustenance as well, and what better time to grab them to offer feedback and discuss the roadmap. We'll have dedicated tables with project members who want to hear from you.
    - title: "Better advertising on a faster web: AMP for Ads"
      time: "1330"
      type: session
      speakers:
        - yaminigupta
        - vamseejasti
      description: So, AMP made content faster on the mobile web. But what about ads? Slow, spammy and disruptive ad experiences have eroded the value of content by annoying users even as advertising continues to be at the cornerstone of every publisher's business model. AMP's mission is to build a better, faster mobile web --- and that includes ads. Join us in this session to hear more about AMP for Ads (A4A), a new initiative from the AMP Project that's fundamentally changing the way ads are built and delivered on the web.
    - title: Building a new AMP component
      time: "1400"
      type: session
      speaker: chenshay
      description: So what happens if you discover that an AMP component for your use case doesn't exist? Contributing a new component is actually much easier than many expect, and Chen will walk you through it.
    - title: Workshops
      time: "1430"
      type: workshop
      description: "To wrap up the conference, it's time to get our hands dirty. Bring your laptop and curiosity and participate in one of the three workshops offered by the AMP team:"
      speakers:
        - sebastianbenz
        - alighassemi
        - sriramkrishnan
        - yaminigupta
        - vamseejasti
      workshops:
        - title: "Build and contribute your first AMP Component"
          speakers:
            - chenshay
        - title: "Beautiful, interactive, canonical: Pick three"
          speakers:
            - sebastianbenz
            - alighassemi
            - sriramkrishnan
        - title: "Progressive Web AMPs: From AMP to PWA"
          speakers:
            - albertomedina
    - title: Wrap-up
      time: "1630"

```

--------------------------------------------------------------------------------
/content/docs/reference/validation_errors.md:
--------------------------------------------------------------------------------

```markdown
---
$title: AMP Validation Errors
$order: 7
toc: true
---

<!---
Copyright 2015 The AMP HTML Authors. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS-IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

Valid AMP documents must not inlude any validation errors.
The purpose of this document is to help you better understand
and fix any validation errors you encounter
when you [validate your AMP pages](/docs/guides/validate.html).
For a complete overview of the validation errors,
see the [AMP validator specification](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).

[TOC]

## AMP HTML tag and attribute errors

### Mandatory tag missing

<table>
   <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>MANDATORY_TAG_MISSING</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The mandatory tag '%1' is missing or incorrect."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Add (or correct) the mandatory HTML tag.</td>
  </tr>
</table>

The following tags must be present in all AMP docs:

* <a name="doctype"></a>`<!doctype html>`
* <a name="html"></a>`<html amp> or <html ⚡>`
* <a name="head"></a>`<head>`
* <a name="canonical"></a>`<link rel="canonical" href="$SOME_URL" />`
* <a name="utf"></a>`<meta charset="utf-8">`
* <a name="viewport"></a>`<meta name="viewport" content="...">`
* <a name="boilerplate"></a>`<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>`
* <a name="ampscript"></a>`<script async src="https://cdn.ampproject.org/v0.js"></script>`
* <a name="body"></a>`<body>`

These mandatory tags include a `mandatory: true` field in the <a href="https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii">AMP validator spec</a>;
they are also referenced in the [AMP specification](/docs/reference/spec.html).

### Tag required by another tag is missing

<table>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>TAG_REQUIRED_BY_MISSING</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The '%1' tag is missing or incorrect, but required by '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Add (or correct) the required HTML tag.</td>
  </tr>
</table>

The validator throws the `TAG_REQUIRED_BY_MISSING` error
when it finds an extended component in the AMP document,
but doesn't find its equivalent `<script>`.

[Extended components](/docs/reference/extended.html)
must be explicitedly included in the AMP document as custom elements.
To fix these errors, navigate to the extended component's reference page,
copy its required script, and paste it into the AMP document `<head>`.

### Disallowed tag

<table>
   <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>DISALLOWED_TAG</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' is disallowed."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Remove the disallowed tag.</td>
  </tr>
</table>

Tags are whitelisted, so there is no definitive list of all disallowed tags;
however, the [AMP specification](/docs/reference/spec.html)
broadly defines the set of disallowed tags.

### Mandatory attribute missing

<table>
   <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>MANDATORY_ATTR_MISSING</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The mandatory attribute '%1' is missing in tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Add mandatory attribute to tag.</td>
  </tr>
</table>

Mandatory attributes for AMP tags are defined within
[AMP's validator spec](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).
Simply search for the tag,
view the listed attributes,
and check for `mandatory: true`.
Mandatory attributes for each AMP tag are also listed
within the tag's specification.

### Invalid attribute value

<table>
   <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>INVALID_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The attribute '%1' in tag '%2' is set to the invalid value '%3'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Fix the attribute value to something that is valid.</td>
  </tr>
</table>

This error indicates that an HTML tag has an attribute with an allowed name,
but not an allowed value.
For example, one common trigger for this error is invalid values for URLs.
All URLs values (in `href` and `src` attributes) must match one of these
[possible attribute values](http://www.w3schools.com/tags/att_a_href.asp).

<strong>IMPORTANT:</strong> Many URL values in AMP require HTTPS.
If you are getting this error, and aren't sure why,
check the relevant AMP tag's specification
to see if the attribute requires HTTPS.

### Disallowed attribute

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>DISALLOWED_ATTR</td>
  </tr>
  <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The attribute '%1' may not appear in tag '%2'."</td>
  </tr>
  <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Remove the attribute from the HTML tag.</td>
  </tr>
</table>

Attributes are whitelisted, so there is no definitive list of all disallowed attributes.
To check the supported attributes for each specific tag,
search for HTML tag, and then `attrs`
in the [AMP validator spec](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).

In addition to a whitelist of specific attributes for each tag,
all AMP tags can use any of the attributes white-listed under `$GLOBAL_ATTRS`;
all attributes with a prefix of `"data-"` are also whitelisted.

### Mandatory text missing or incorrect

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>MANDATORY_CDATA_MISSING_OR_INCORRECT</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The mandatory text (CDATA) inside tag '%1' is missing or incorrect."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Add or correct the mandatory text inside the tag.</td>
  </tr>
</table>

CDATA is the content data between a start and end HTML tag
and is currently evaluated with both whitelists and blacklists.
Tags with mandatory CDATA include:

[sourcecode:html]
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
[/sourcecode]

And:

[sourcecode:html]
<style amp-custom>
[/sourcecode]

Detailed messages for this can be one of the following:

* "Mandatory style boilerplate (js enabled)"
* "Mandatory style boilerplate (noscript)"
* "Disallowed -amp- CSS class name prefix"
* "Disallowed !important attribute in CSS"
* "Disallowed &#64;charset in CSS"
* "Disallowed &#64;import in CSS"
* "Disallowed @namespace in CSS"
* "Disallowed @supports in CSS"
* "Disallowed @document in CSS"
* "Disallowed @page in CSS"
* "Disallowed @viewport in CSS"

### Disallowed text inside tag

<table>
   <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>CDATA_VIOLATES_BLACKLIST</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The text (CDATA) inside tag '%1' matches '%2', which is disallowed."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Remove disallowed text.</td>
  </tr>
</table>

Specific CSS data has been blacklisted
to validate essential CSS AMP rules.

The following is the list of blacklisted CSS data
(see also [`blacklisted_cdata_regex` in the AMP validator spec](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii)):

* `"\\.i?-amp-"` ("CSS -amp- class name prefix")
* `"!important"`
* `"charset"`
* `"&#64;import"`
* `"@namespace"`
* `"@document"`
* `"@page"`
* `"@viewport"`

### Disallowed property inside attribute in tag

<table>
   <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>DISALLOWED_PROPERTY_IN_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The property '%1' in attribute '%2' in tag '%3' is disallowed."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Remove disallowed property in the specified attribute.</td>
  </tr>
</table>

This error occurs when the property name inside an attribute isn't allowed.
The term property in this context means the structured key/value data inside an attribute.
For example, in
`<meta name="viewport content="width=device-width;minimum-scale=1">`,
`width` and `minimum-scale` are property names.

The following results in a DISALLOWED_PROPERTY_IN_ATTR_VALUE error:

`<meta name="viewport content="width=device-width;invalidfoo=1">`

As another example,
the following would result in an error:

`<meta http-equiv="X-UA-Compatible" content="invalidfoo=edge">`

It should be: `<meta http-equiv="X-UA-Compatible" content="ie=edge">`.

### Invalid property value

<table>
   <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>INVALID_PROPERTY_VALUE_IN_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The property '%1' in attribute '%2' in tag '%3' is set to '%4', which is invalid."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Correct the invalid property value.</td>
  </tr>
</table>

This error occurs when the property value inside an attribute is invalid.
The term property in this context means the structured key/value data inside an attribute.
For example, in
`<meta name="viewport content="width=device-width;minimum-scale=1">`,
`device-width` and `1` are property values.

The following results in a INVALID_PROPERTY_VALUE_IN_ATTR_VALUE error:

`<meta name=viewport content="width=device-width;minimum-scale=invalidfoo">`

As another example,
the following would result in an error:

`<meta http-equiv="X-UA-Compatible" content="ie=invalidfoo">`

It should be: `<meta http-equiv="X-UA-Compatible" content="ie=edge">`

### Missing URL

<table>
  <tr>
    <td class="col-thirty"><strong>Code</strong></td>
    <td>MISSING_URL</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Format</strong></td>
    <td>"Missing URL for attribute '%1' in tag '%2'."</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Fix</strong></td>
    <td>Add the valid URL.</td>
  </tr>
</table>

This error occurs when an attribute that requires a URL is missing it,
for example, an empty `href` or `src` attribute.

### Invalid URL

<table>
  <tr>
    <td class="col-thirty"><strong>Code</strong></td>
    <td>INVALID_URL_PROTOCOL</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Format</strong></td>
    <td>"Malformed URL '%3' for attribute '%1' in tag '%2'"</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Fix</strong></td>
    <td>Fix the broken URL.</td>
  </tr>
</table>

This error occurs when a attribute has a URL,
but the URL is invalid.

### Invalid URL protocol

<table>
  <tr>
    <td class="col-thirty"><strong>Code</strong></td>
    <td>INVALID_URL_PROTOCOL</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Format</strong></td>
    <td>Invalid URL protocol '%3:' for attribute '%1' in tag '%2'.</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Fix</strong></td>
    <td>Change to a valid protocol, for example, `http` may need to be `https`.</td>
  </tr>
</table>

This error occurs for tags that have an `href` or `src`
that must be set to certain protocols.
For example, many tags require `https`.

### Mandatory property missing from attribute

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>MANDATORY_PROPERTY_MISSING_FROM_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The property '%1' is missing from attribute '%2' in tag '%3'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Add the missing property.</td>
  </tr>
</table>

Currently, this error occurs if these mandatory properties are missing:

* `content="...ie=..."`
* `content="...width=..."`
* `content="...minimum-scale=..."`

They refer to expected tags:

* `<meta http-equiv="X-UA-Compatible" content="ie=edge">`
* `<meta name=viewport content="width=device-width;minimum-scale=1">`

### Mutually exclusive attributes

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>MUTUALLY_EXCLUSIVE_ATTRS</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"Mutually exclusive attributes encountered in tag '%1' - pick one of %2."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Remove one of the mutually exclusive attributes.</td>
  </tr>
</table>

This error occurs when a tag has both of the mutually exclusive attributes.
For example, only one is allowed for the following tags:

* [amp-iframe](/docs/reference/extended/amp-iframe.html): `src` or `srcdoc`
* [amp-jwplayer](/docs/reference/extended/amp-jwplayer.html): `data-media-id` or `data-playlist-id`

### Missing mandatory attribute from list

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>MANDATORY_ONEOF_ATTR_MISSING</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' is missing a mandatory attribute - pick one of %2." </td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Add the missing mandatory attribute from the choice of attributes provided.</td>
  </tr>
</table>

This error occurs when a tag is missing one required attribute
from multiple choices.
For example, these tags require one attribute from two possible choices:

* [amp-twitter](/docs/reference/extended/amp-twitter.html): `data-tweetid` or `src`
* [amp-instagram](/docs/reference/extended/amp-instagram.html): `data-shortcode` or `src`
* [amp-iframe](/docs/reference/extended/amp-iframe.html): `src` or `srcdoc`
* [amp-youtube](/docs/reference/extended/amp-youtube.html): `src` or `data-videoid`

### Wrong parent tag

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>WRONG_PARENT_TAG</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The parent tag of tag '%1' is '%2', but it can only be '%3'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Make the tag a direct child of the required parent.</td>
  </tr>
</table>

Specific tags require an immediate parent (as opposed to distant ancestor).
The following lists the required parent for specific tags
(tag, parent):

* `!doctype` requires parent tag `root`.
* `html` requires parent tag `!doctype`.
* `head` requires parent tag `html`.
* `body` requires parent tag `html`.
* `link` requires parent tag `head`.
* `meta` requires parent tag `head`.
* `style amp-custom` requires parent tag `head`.
* `style` requires parent tag `boilerplate (noscript)`.
* `noscript` requires parent tag `head`.
* `script` requires parent tag `head`.
* `source` requires a media tag (`amp-audio`, `amp-video`, etc.).

### Disallowed tag ancestor

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>DISALLOWED_TAG_ANCESTOR</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' may not appear as a descendant of tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Remove (or move) the disallowed nested tag.</td>
  </tr>
</table>

This error occurs when a tag is a descendant of another tag
which doesn't validate.
Currently, the only example is a <code>template</code> tag,
which may not be nested under another <code>template</code> tag.

### Mandatory tag ancestor

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>MANDATORY_TAG_ANCESTOR</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' may only appear as a descendant of tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Either remove the tag or make it a descendant of the specific tag.</td>
  </tr>
</table>

Mandatory descendants are defined in the
[AMP validator specification](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii)
as `mandatory_ancestor`.

The error occurs when the following tags
are missing their `mandatory_ancestor` (tag, ancestor):

* `img` must be a descendant of `noscript`.
* `video` must be a descendant of `noscript`.
* `audio` must be a descendant of `noscript`.
* `noscript` must be a descendant of `body`.

### Mandatory tag ancestor with hint

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>MANDATORY_TAG_ANCESTOR_WITH_HINT</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' may only appear as a descendant of tag '%2'. Did you mean '%3'?"</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Remove the tag, make it a descendate of the specific tag, or replace the tag with the hinted tag.</td>
  </tr>
</table>

The error occurs when one of the following tags is found in the AMP document,
and isn't properly nested in its mandatory parent:

* `img` isn't within `noscript` parent.
* `video` isn't within `noscript` parent.
* `audio` isn't within `noscript` parent.
* `noscript` isn't within `body` parent.

### Duplicate unique tag

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>DUPLICATE_UNIQUE_TAG</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' appears more than once in the document."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Remove one of the duplicate tags from the AMP document.</td>
  </tr>
</table>

This error occurs when exactly one instance of the tag is allowed,
and a duplicate is found.

The full list of unique tags is known:

* `<doctype html>`
* `<html amp>`
* `<head>`
* `<link rel=canonical href=...>`
* `<link rel=amphtml href=...>`
* `<meta charset="utf-8">`
* `<meta viewport>`
* `<style amp-custom>`
* `<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>`
* `<body>`
* `<script src="https://cdn.ampproject.org/v0.js">`

## Style and layout errors

Before diving into style and layout errors,
it's worth understanding how
[styling](/docs/guides/responsive/style_pages.html) and
[layout](/docs/guides/responsive/control_layout.html) work in AMP.
Since AMP pages are HTML pages, styling is very much the same as any HTML page.
But there are some restrictions to ensure pages load fast,
and the AMP validator enforces these restrictions.

Layout is more controlled in AMP pages.
Any tag that gets displayed on the page
requires a pre-defined height and width,
significantly reducing rendering and scrolling jank.
This doesn't mean that you have to manually include these attributes.
For certain layout types,
the AMP validator won't throw errors
as default values are assumed.

Each AMP tag has a ist of `supported_layouts`,
as defined in the
[AMP validator specification](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).
The validator will throw errors for unsupported layouts,
and it will check validation rules for the pre-defined layout.

### Stylesheet too long

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>STYLESHEET_TOO_LONG</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The author stylesheet specified in tag 'style' is too long - we saw %1 bytes whereas the limit is %2 bytes."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Reduce the size of the stylesheet to be under 50,000 bytes.</td>
  </tr>
</table>

The AMP validator throws this error
when it measures the size of the styles content
within `<style amp-custom>` to exceed the 50,000 bytes limit.

### CSS syntax error

<table>
   <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>CSS_SYNTAX</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"CSS syntax error in tag '%1' - %2."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Fix the CSS syntax error.</td>
  </tr>
</table>

This error occurs when you've CSS syntax errors
in the specified tag.
If you aren't sure what's causing the error,
try running the CSS
through an online CSS validator, for example,
[csslint](http://csslint.net/).

### CSS syntax error at specific rule

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>CSS_SYNTAX_INVALID_AT_RULE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"CSS syntax error in tag '%1' - saw invalid at rule '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Fix the specified CSS syntax error.</td>
  </tr>
</table>

This error refers to the @-rules within CSS,
for which AMP only allows a handful of rules.
(see also the [AMP specification](/docs/reference/spec.html)).
For example, <code>@import</code> isn't allowed.
The validation error specifically
tells you the rule that's invalid,
making it easier to fix that rule.

### Implied layout isn't supported by AMP tag

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>IMPLIED_LAYOUT_INVALID</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The implied layout '%1' is not supported by tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Provide a valid layout attribute for the tag.</td>
  </tr>
</table>

This error occurs when you don't specify a layout for the AMP tag,
and the implied layout (based on width, height, and sizes) isn't supported.
Check the `supported_layout` values for the tag
in the [AMP validator specification](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).

Actual layout behavior is determined by the `layout` attribute.
For more on how layout works,
see [How to Control Layout](/docs/guides/responsive/control_layout.html) and
the [AMP HTML layout system specification](https://github.com/ampproject/amphtml/blob/master/spec/amp-html-layout.md).

**Note:** If you don't specify the layout,
and you don't include `width` and `height` values,
the layout defaults to CONTAINER.
The validator throws an error
as CONTAINER isn't supported in any AMP tags.
Specify a layout other than CONTAINER,
or add a `width` and/or `height` value and the error goes away.

### Attribute not allowed by implied layout

<table>
  <tr>
    <td class="col-thirty"><strong>Code</strong></td>
    <td>ATTR_DISALLOWED_BY_IMPLIED_LAYOUT</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Format</strong></td>
    <td>"The attribute '%1' in tag '%2' is disallowed by implied layout '%3'."</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Fix</strong></td>
    <td>Remove the disallowed attribute from the tag,
      or else specify a layout that allows it.</td>
  </tr>
</table>

This error occurs when you don't specify a layout for the AMP tag,
and the implied layout contains a disallowed attribute.
Disallowed attributes for layout types are described in the
[AMP HTML layout system specification](https://github.com/ampproject/amphtml/blob/master/spec/amp-html-layout.md).

### Specified layout isn't supported by AMP tag

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>SPECIFIED_LAYOUT_INVALID</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The specified layout '%1' is not supported by tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Specify a layout that is supported by the tag.</td>
  </tr>
</table>

This error occurs when the specified layout
for the tag isn't supported.
Check the `supported_layout` values for the tag
in the [AMP validator specification](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).

Actual layout behavior is determined by the `layout` attribute.
For more on how layout works,
see [How to Control Layout](/docs/guides/responsive/control_layout.html) and
the [AMP HTML layout system specification](https://github.com/ampproject/amphtml/blob/master/spec/amp-html-layout.md).

### Attribute not allowed by specified layout

<table>
  <tr>
    <td class="col-thirty"><strong>Code</strong></td>
    <td>ATTR_DISALLOWED_BY_SPECIFIED_LAYOUT</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Format</strong></td>
    <td>"The attribute '%1' in tag '%2' is disallowed by implied layout '%3'."</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Fix</strong></td>
    <td>Remove the disallowed attribute from the tag,
      or else specify a layout that allows it.</td>
  </tr>
</table>

This error occurs when you specify a layout for the AMP tag,
and the layout contains a disallowed attribute.
Disallowed attributes for layout types are described in the
[AMP HTML layout system specification](https://github.com/ampproject/amphtml/blob/master/spec/amp-html-layout.md).

### Invalid value for attribute required by layout

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>ATTR_VALUE_REQUIRED_BY_LAYOUT</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"Invalid value '%1' for attribute '%2' in tag '%3' - for layout '%4', set the attribute '%2' to value '%5'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Set the attribute to the specified value.</td>
  </tr>
</table>

This error occurs when the attribute value is invalid for the specified layout.
To understand what triggers this error,
you need to familiarize yourself with
the [different behaviors of layouts](/docs/guides/responsive/control_layout.html#size-and-position-elements).

Let's say you set the layout to be `fixed-height` and
you include numeric values for both `height` and `width`.
The `fixed-height` layout takes on a `height` value.
The `width` attribute must not be present or else set to `auto`.
The validator throws the ATTR_VALUE_REQUIRED_BY_LAYOUT.

### Inconsistent units for width and height

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>INCONSISTENT_UNITS_FOR_WIDTH_AND_HEIGHT</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"Inconsistent units for width and height in tag '%1' - width is specified in '%2' whereas height is specified in '%3'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Provide consistent unit widths and heights.</td>
  </tr>
</table>

With the exception of `layout=fixed`,
width and height attributes need to be expressed in the same units.
When they are not, this error is triggered.

For example, `<amp-img src="" layout="responsive" width="42px" height="42rem">`,
results in this error message:

"Inconsistent units for width and height in tag 'amp-img' - width is specified in 'px' whereas height is specified in 'rem'."

## Templating errors

AMP pages can't include templating syntax,
unless that syntax is within an AMP tag specifically
designed to include templates, for example,
[amp-mustache](/docs/reference/extended/amp-mustache.html).

It's OK to include templates in your source files,
so long as the generated output of those files doesn't contain the templates
(see also
[Use CSS preprocessors](/docs/guides/responsive/style_pages.html#use-css-preprocessors)).

### Attribute contains template syntax

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>TEMPLATE_IN_ATTR_NAME</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"Mustache template syntax in attribute name '%1' in tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Remove Mustache template syntax from the attribute.</td>
  </tr>
</table>

This error occurs anytime the validator finds
[Mustache template syntax](https://mustache.github.io/mustache.5.html)
in an attribute value.

### Attribute contains unescaped template syntax

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>UNESCAPED_TEMPLATE_IN_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The attribute '%1' in tag '%2' is set to '%3', which contains unescaped Mustache template syntax."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Escape the mustache template.</td>
  </tr>
</table>

This error occurs anytime the validator finds
[unescaped Mustache template syntax](https://mustache.github.io/mustache.5.html)
in an attribute value.

### Attribute contains template partial

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>TEMPLATE_PARTIAL_IN_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The attribute '%1' in tag '%2' is set to '%3', which contains a Mustache template partial."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Remove the mustache partial.</td>
  </tr>
</table>

This error occurs anytime the validator finds a
[Mustache partial](https://mustache.github.io/mustache.5.html)
in an attribute value.

## Deprecation errors

### Deprecated tag

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>DEPRECATED_TAG</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>No error message defined as yet (no deprecated tags).</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>Remove the deprecated tag.</td>
  </tr>
</table>

This warning occurs when a previously valid AMP tag is found in the AMP document.
It's only a warning; AMP documents with warnings continue to be valid.
Currently no deprecated tags exist; the warning is reserved for future deprecations.

### Deprecated attribute

<table>
  <tr>
  	<td class="col-thirty"><strong>Code</strong></td>
  	<td>DEPRECATED_ATTR</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The attribute '%1' in tag '%2' is deprecated - use '%3' instead."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Fix</strong></td>
  	<td>As good practice, remove the deprecated attribute.</td>
  </tr>
</table>

This warning occurs when a previously valid AMP attribute is found in the AMP document.
It's only a warning; AMP documents with warnings continue to be valid.

Identify deprecated attributes for each AMP tag
by searching for `deprecation` in the
[AMP validator specification](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).
```

--------------------------------------------------------------------------------
/content/docs/reference/validation_errors@id.md:
--------------------------------------------------------------------------------

```markdown
---
$title: Kesalahan Validasi AMP
---

<!---
Copyright 2015 The AMP HTML Authors. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS-IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

Tidak boleh ada kesalahan validasi apa pun dalam dokumen AMP yang valid.
Tujuan dokumen ini adalah untuk membantu Anda memahami
dengan lebih baik dan memperbaiki kesalahan validasi yang dihadapi
ketika [memvalidasi laman AMP](/docs/guides/validate.html).
Untuk ringkasan lengkap kesalahan validasi,
lihat [spesifikasi validator AMP](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).

[TOC]

## Kesalahan atribut dan tag HTML AMP

### Tag wajib tidak tersedia

<table>
   <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>MANDATORY_TAG_MISSING</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The mandatory tag '%1' is missing or incorrect."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Tambahkan (atau perbaiki) tag HTML wajib.</td>
  </tr>
</table>

Tag berikut harus ada di semua dokumen AMP:

* <a name="doctype"></a>`<!doctype html>`
* <a name="html"></a>`<html amp> or <html ⚡>`
* <a name="head"></a>`<head>`
* <a name="canonical"></a>`<link rel="canonical" href="$SOME_URL" />`
* <a name="utf"></a>`<meta charset="utf-8">`
* <a name="viewport"></a>`<meta name="viewport" content="...">`
* <a name="boilerplate"></a>`<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>`
* <a name="ampscript"></a>`<script async src="https://cdn.ampproject.org/v0.js"></script>`
* <a name="body"></a>`body`

Tag wajib ini termasuk bidang `mandatory: true` di [spek validator AMP](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii);
juga dirujuk dalam [spesifikasi AMP](/docs/reference/spec.html).

### Tag yang dibutuhkan oleh tag lain tidak tersedia

<table>
   <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>TAG_REQUIRED_BY_MISSING</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The '%1' tag is missing or incorrect, but required by '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Tambahkan (atau perbaiki) tag HTML yang dibutuhkan.</td>
  </tr>
</table>

Validator memunculkan kesalahan `TAG_REQUIRED_BY_MISSING`
ketika menemukan komponen yang diperpanjang di dokumen AMP,
tetapi tidak menemukan persamaannya `<script>`.

[Komponen yang diperpanjang](/docs/reference/extended.html)
harus disertakan dalam dokumen AMP sebagai komponen khusus.
Untuk memperbaiki kesalahan ini, navigasikan ke laman referensi komponen yang diperpanjang,
salin skrip yang dibutuhkan, dan tempel ke dokumen AMP `<head>`.

### Tag terlarang

<table>
   <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>DISALLOWED_TAG</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' is disallowed."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus tag terlarang.</td>
  </tr>
</table>

Tag dimasukkan ke daftar putih, sehingga tidak ada daftar definitif semua tag terlarang;
namun, [spesifikasi AMP](/docs/reference/spec.html)
mendefinisikan secara luas kumpulan tag terlarang.

### Atribut wajib tidak tersedia

<table>
   <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>MANDATORY_ATTR_MISSING</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The mandatory attribute '%1' is missing in tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Tambahkan atribut wajib ke tag.</td>
  </tr>
</table>

Atribut wajib tag AMP didefinisikan dalam
[spek validator AMP](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).
Cukup telusuri tag,
lihat atribut yang tercantum,
dan periksa `mandatory: true`.
Atribut wajib setiap tag AMP juga tercantum
dalam spesifikasi tag.

### Nilai atribut tidak valid

<table>
   <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>INVALID_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The attribute '%1' in tag '%2' is set to the invalid value '%3'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Perbaiki nilai atribut menjadi nilai yang valid.</td>
  </tr>
</table>

Kesalahan ini menunjukkan bahwa tag HTML memiliki atribut dengan nama yang diizinkan,
tetapi nilainya terlarang.
Misalnya, pemicu umum kesalahan ini adalah nilai yang tidak valid untuk URL.
Semua nilai URL (di atribut `href` dan `src`) harus cocok dengan salah satu
[nilai atribut yang mungkin](http://www.w3schools.com/tags/att_a_href.asp) berikut.

<strong>PENTING:</strong> Banyak nilai URL di AMP membutuhkan HTTPS.
Jika Anda mendapati kesalahan ini, dan tidak yakin tentang penyebabnya,
periksa spesifikasi tag AMP yang relevan
untuk melihat atribut yang membutuhkan HTTPS.

### Atribut terlarang

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>DISALLOWED_ATTR</td>
  </tr>
  <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The attribute '%1' may not appear in tag '%2'."</td>
  </tr>
  <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus atribut dari tag HTML.</td>
  </tr>
</table>

Atribut dimasukkan ke daftar putih, sehingga tidak ada daftar definitif atribut terlarang.
Untuk memeriksa atribut yang didukung untuk setiap tag tertentu,
telusuri tag HTML, kemudian `attrs`
di [spek validator AMP](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).

Selain daftar putih atribut tertentu untuk setiap tag,
semua tag AMP dapat menggunakan atribut apa pun yang tercantum dalam daftar putih di `$GLOBAL_ATTRS`;
semua atribut dengan awalan `"data-"` juga dimasukkan dalam daftar putih.

### Teks wajib tidak tersedia atau salah

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>MANDATORY_CDATA_MISSING_OR_INCORRECT</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The mandatory text (CDATA) inside tag '%1' is missing or incorrect."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Tambahkan atau perbaiki teks wajib dalam tag.</td>
  </tr>
</table>

CDATA adalah data konten antara tag HTML awal dan akhir
serta saat ini dievaluasi dengan daftar putih dan daftar hitam.
Tag dengan CDATA wajib termasuk:

[sourcecode:YKL]
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
[/sourcecode]

Dan:

[sourcecode:YKL]
<style amp-custom>
[/sourcecode]

Pesan mendetail kesalahan ini dapat berupa salah satu dari yang berikut:

* "Gaya wajib yang diulang (js diaktifkan)"
* "Gaya wajib yang diulang (noscript)"
* "Awalan nama kelas CSS -amp- terlarang"
* "Atribut penting terlarang di CSS!"
* "@charset terlarang di CSS"
* "@import terlarang di CSS"
* "@namespace terlarang di CSS"
* "@support terlarang di CSS"
* "@document terlarang di CSS"
* "@page terlarang di CSS"
* "@viewport terlarang di CSS"

### Teks terlarang dalam tag

<table>
   <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>CDATA_VIOLATES_BLACKLIST</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The text (CDATA) inside tag '%1' matches '%2', which is disallowed."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus teks terlarang.</td>
  </tr>
</table>

Data CSS tertentu dimasukkan ke daftar hitam
untuk memvalidasi aturan AMP CSS yang penting.

Berikut adalah daftar data CSS yang dimasukkan ke daftar hitam
(lihat juga <a href="https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii">`blacklisted_cdata_regex` di spek validator AMP</a>):

* `"\\.i?-amp-"` ("Awalan nama kelas -amp- CSS")
* `"!important"`
* `"charset"`
* `"@import"`
* `"@namespace"`
* `"@document"`
* `"@page"`
* `"@viewport"`

### Properti terlarang dalam atribut di tag

<table>
   <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>DISALLOWED_PROPERTY_IN_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The property '%1' in attribute '%2' in tag '%3' is disallowed."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus properti terlarang di atribut tertentu.</td>
  </tr>
</table>

Kesalahan ini terjadi ketika nama properti dalam atribut tidak diperbolehkan.
Properti istilah dalam konteks ini berarti data kunci/nilai terstruktur dalam atribut.
Misalnya, di
`<meta name="viewport content="width=device-width;minimum-scale=1">`,
`width` dan `minimum-scale` adalah nama properti.

Berikut ini yang menyebabkan kesalahan DISALLOWED_PROPERTY_IN_ATTR_VALUE:

`<meta name="viewport content="width=device-width;invalidfoo=1">`

Contoh lainnya,
yang berikut akan menyebabkan kesalahan:

`<meta http-equiv="X-UA-Compatible" content="invalidfoo=edge">`

Seharusnya: `<meta http-equiv="X-UA-Compatible" content="ie=edge">`.

### Nilai properti tidak valid

<table>
   <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>INVALID_PROPERTY_VALUE_IN_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The property '%1' in attribute '%2' in tag '%3' is set to '%4', which is invalid."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Perbaiki nilai properti yang tidak valid.</td>
  </tr>
</table>

Kesalahan ini terjadi jika nilai properti dalam atribut tidak valid.
Properti istilah dalam konteks ini berarti data kunci/nilai terstruktur dalam atribut.
Misalnya, di
`<meta name="viewport content="width=device-width;minimum-scale=1">`,
`device-width` dan `1` adalah nilai properti.

Berikut ini yang menyebabkan kesalahan INVALID_PROPERTY_VALUE_IN_ATTR_VALUE:

`<meta name=viewport content="width=device-width;minimum-scale=invalidfoo">`

Contoh lainnya,
yang berikut akan menyebabkan kesalahan:

`<meta http-equiv="X-UA-Compatible" content="ie=invalidfoo">`

Seharusnya: `<meta http-equiv="X-UA-Compatible" content="ie=edge">`

### URL tidak tersedia

<table>
  <tr>
    <td class="col-thirty"><strong>Kode</strong></td>
    <td>MISSING_URL</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Format</strong></td>
    <td>"Missing URL for attribute '%1' in tag '%2'."</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Perbaikan</strong></td>
    <td>Tambahkan URL yang valid.</td>
  </tr>
</table>

Kesalahan ini terjadi jika URL yang dibutuhkan atribut tidak tersedia,
misalnya, atribut `href` atau `src` kosong.

### URL tidak valid

<table>
  <tr>
    <td class="col-thirty"><strong>Kode</strong></td>
    <td>INVALID_URL_PROTOCOL</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Format</strong></td>
    <td>"Malformed URL '%3' for attribute '%1' in tag '%2'"</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Perbaikan</strong></td>
    <td>Perbaiki URL yang rusak.</td>
  </tr>
</table>

Kesalahan ini terjadi jika atribut memiliki URL,
tetapi URL-nya tidak valid.

### Protokol URL tidak valid

<table>
  <tr>
    <td class="col-thirty"><strong>Kode</strong></td>
    <td>INVALID_URL_PROTOCOL</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Format</strong></td>
    <td>Invalid URL protocol '%3:' for attribute '%1' in tag '%2'.</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Perbaikan</strong></td>
    <td>Ubah ke protokol yang valid, misalnya, `http` mungkin perlu diubah ke `https`.</td>
  </tr>
</table>

Kesalahan ini terjadi karena tag yang memiliki `href` atau `src`
harus ditetapkan ke protokol tertentu.
Misalnya, banyak tag yang memerlukan `https`.

### Properti wajib tidak tersedia di atribut

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>MANDATORY_PROPERTY_MISSING_FROM_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The property '%1' is missing from attribute '%2' in tag '%3'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Tambahkan properti yang tidak tersedia.</td>
  </tr>
</table>

Saat ini, kesalahan ini terjadi jika properti wajib berikut tidak tersedia:

* `content="...ie=..."`
* `content="...width=..."`
* `content="...minimum-scale=..."`

Properti tersebut mengacu pada tag yang diharapkan:

* `<meta http-equiv="X-UA-Compatible" content="ie=edge">`
* `<meta name=viewport content="width=device-width;minimum-scale=1">`

### Atribut saling lepas

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>MUTUALLY_EXCLUSIVE_ATTRS</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"Mutually exclusive attributes encountered in tag '%1' - pick one of %2."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus salah satu atribut yang saling lepas.</td>
  </tr>
</table>

Kesalahan ini terjadi jika tag memiliki atribut yang saling lepas.
Misalnya, hanya satu yang diizinkan dari tag berikut:

* [amp-twitter](/docs/reference/extended/amp-twitter.html): `data-tweetid` atau `src`
* [amp-instagram](/docs/reference/extended/amp-instagram.html): `data-shortcode` atau `src`
* [amp-iframe](/docs/reference/extended/amp-iframe.html): `src` atau `srcdoc`
* [amp-youtube](/docs/reference/extended/amp-youtube.html): `src` atau `data-videoid`

### Atribut wajib di daftar tidak tersedia

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>MANDATORY_ONEOF_ATTR_MISSING</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' is missing a mandatory attribute - pick one of %2." </td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Tambahkan atribut wajib yang tidak tersedia dari pilihan atribut yang tersedia.</td>
  </tr>
</table>

Kesalahan ini terjadi jika atribut yang dibutuhkan tag tidak tersedia
di pilihan.
Misalnya, tag berikut memerlukan salah satu atribut dari pilihan yang tersedia:

* [amp-twitter](/docs/reference/extended/amp-twitter.html): `data-tweetid` atau `src`
* [amp-instagram](/docs/reference/extended/amp-instagram.htm): `data-shortcode` atau `src`
* [amp-iframe](/docs/reference/extended/amp-iframe.html): `src` atau `srcdoc`
* [amp-youtube](/docs/reference/extended/amp-youtube.html): `src` atau `data-videoid`

### Tag induk salah

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>WRONG_PARENT_TAG</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The parent tag of tag '%1' is '%2', but it can only be '%3'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Buat tag turunan langsung dari tag induk yang dibutuhkan.</td>
  </tr>
</table>

Tag tertentu memerlukan induk langsung (bukan induk jauh).
Berikut daftar tag tertentu yang membutuhkan induk
(tag, induk):

* `!doctype` membutuhkan tag induk `root`.
* `html` membutuhkan tag induk `!doctype`.
* `head` membutuhkan tag induk `html`.
* `body` membutuhkan tag induk `html`.
* `link` membutuhkan tag induk `head`.
* `meta` membutuhkan tag induk `head`.
* `style amp-custom` membutuhkan tag induk `head`.
* `style` membutuhkan tag induk `boilerplate (noscript)`.
* `noscript` membutuhkan tag induk `head`.
* `script` membutuhkan tag induk `head`.
* `source` membutuhkan tag media (`amp-audio`, `amp-video`, dll.).

### Induk tag terlarang

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>DISALLOWED_TAG_ANCESTOR</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' may not appear as a descendant of tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus (atau pindahkan) tag bertingkat terlarang.</td>
  </tr>
</table>

Kesalahan ini terjadi jika tag merupakan turunan dari tag lain
yang tidak memvalidasi.
Saat ini, contohnya hanya tag `template`,
yang tidak dapat bertingkat di tag `template` lain.

### Induk tag wajib

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>MANDATORY_TAG_ANCESTOR</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' may only appear as a descendant of tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus tag atau buat turunan tag tertentu.</td>
  </tr>
</table>

Turunan wajib didefinisikan di
[spesifikasi validator AMP](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii)
sebagai `mandatory_ancestor`.

Kesalahan ini terjadi saat tag berikut
tidak memiliki `mandatory_ancestor` (tag, induk):

* `img` harus berupa turunan dari `noscript`.
* `video` harus berupa turunan dari `noscript`.
* `audio` harus berupa turunan dari `noscript`.
* `noscript` harus berupa turunan dari `body`.

### Induk tag wajib dengan petunjuk

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>MANDATORY_TAG_ANCESTOR_WITH_HINT</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' may only appear as a descendant of tag '%2'. Did you mean '%3'?"</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus tag, buat turunan tag tertentu, atau ganti tag dengan tag yang diberi petunjuk.</td>
  </tr>
</table>

Kesalahan terjadi jika salah satu tag berikut ditemukan di dokumen AMP,
dan tidak bertumpuk dengan benar di induk wajibnya:

* `img` tidak dalam induk `noscript`.
* `video` tidak dalam induk `noscript`.
* `audio` tidak dalam induk `noscript`.
* `noscript` tidak dalam induk `body`.

### Tag unik duplikat

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>DUPLICATE_UNIQUE_TAG</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The tag '%1' appears more than once in the document."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus salah satu tag duplikat dari dokumen AMP.</td>
  </tr>
</table>

Kesalahan ini terjadi jika hanya satu kemunculan tag yang diizinkan,
dan ditemukan diplikatnya.

Daftar lengkap tag unik yang diketahui:

* `<doctype html>`
* `<html amp>`
* `<head>`
* `<link rel=canonical href=...>`
* `<link rel=amphtml href=...>`
* `<meta charset="utf-8">`
* `<meta viewport>`
* `<style amp-custom>`
* `<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>`
* `<body>`
* `<script src="https://cdn.ampproject.org/v0.js">`

## Kesalahan gaya dan tata letak

Sebelum mendalami kesalahan gaya dan tata letak,
Anda perlu memahami cara kerja
[pemberian gaya](/docs/guides/responsive/style_pages.html) dan
[tata letak](/docs/guides/responsive/control_layout.html) di AMP.
Karena laman AMP adalah laman HTML, pemberian gaya kurang lebih sama seperti pada laman HTML.
Tetapi ada beberapa pembatasan untuk memastikan laman dimuat dengan cepat,
dan validator AMP memberlakukan pembatasan ini.

Tata letak lebih terkontrol di laman AMP.
Setiap tag yang ditampilkan pada laman
membutuhkan tinggi dan lebar yang telah ditetapkan sebelumnya,
untuk mengurangi perenderan dan pengguliran yang tidak perlu secara signifikan.
Hal ini tidak berarti Anda perlu menyertakan atribut ini secara manual.
Untuk jenis tata letak tertentu,
validator AMP tidak akan menampilkan kesalahan
karena nilai default telah diasumsikan.

Setiap tag AMP memiliki akhiran `supported_layouts`,
seperti yang didefinisikan dalam
[spesifikasi validator AMP](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).
Validator akan menampilkan kesalahan untuk tata letak yang tidak didukung,
dan akan memeriksa aturan validasi tata letak yang telah didefinisikan sebelumnya.

### Stylesheet terlalu panjang

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>STYLESHEET_TOO_LONG</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The author stylesheet specified in tag 'style' is too long - we saw %1 bytes whereas the limit is %2 bytes."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Kurangi ukuran stylesheet menjadi di bawah 50.000 byte.</td>
  </tr>
</table>

Kesalahan ini akan ditampilkan
jika validator AMP mengukur konten gaya
dalam `<style amp-custom>` dan ukurannya melebihi batas 50.000 byte.

### Kesalahan sintaksis CSS

<table>
   <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>CSS_SYNTAX</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"CSS syntax error in tag '%1' - %2."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Perbaiki kesalahan sintaksis CSS.</td>
  </tr>
</table>

Kesalahan ini terjadi jika Anda memiliki kesalahan sintaksis CSS
di tag tertentu.
Jika tidak yakin penyebab kesalahan,
coba jalankan CSS
lewat validator CSS online, misalnya,
[csslint](http://csslint.net/).

### Kesalahan sintaksis CSS pada aturan tertentu

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>CSS_SYNTAX_INVALID_AT_RULE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"CSS syntax error in tag '%1' - saw invalid at rule '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Perbaiki kesalahan sintaksis CSS tertentu.</td>
  </tr>
</table>

Kesalahan ini mengacu pada @-aturan dalam CSS,
untuk setiap AMP yang hanya mengizinkan beberapa aturan.
(lihat juga [spesifikasi AMP ](/docs/reference/spec.html)).
Misalnya, `@import` tidak diizinkan.
Kesalahan validasi secara khusus
memberi tahu Anda aturan yang tidak valid,
memudahkan untuk memperbaiki aturan.

### Tata letak tersirat tidak didukung tag AMP

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>IMPLIED_LAYOUT_INVALID</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The implied layout '%1' is not supported by tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Berikan atribut tata letak yang valid kepada tag.</td>
  </tr>
</table>

Kesalahan ini terjadi jika Anda tidak menentukan tata letak untuk tag AMP,
dan tata letak tersirat (berdasarkan lebar, tinggi, dan ukuran) tidak didukung.
Periksa nilai `supported_layout` untuk tag
di [spesifikasi validator AMP](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).

Perilaku tata letak yang sebenarnya ditentukan oleh atribut `layout`.
Untuk mengetahui lebih banyak tentang cara kerja tata letak,
lihat [Cara Mengontrol Tata Letak](/docs/guides/responsive/control_layout.html) dan
[Spesifikasi sistem tata letak HTML AMP](https://github.com/ampproject/amphtml/blob/master/spec/amp-html-layout.md).

**Catatan:** Jika tata letak tidak ditentukan,
serta nilai `width` dan `height` tidak disertakan,
default tata letak menjadi PENAMPUNG.
Validator menampilkan kesalahan
karena PENAMPUNG tidak didukung di tag AMP mana pun.
Tentukan tata letak selain PENAMPUNG,
atau tambahkan nilai `width` dan/atau `height`, maka kesalahan akan hilang.

### Atribut tidak diizinkan oleh tata letak tersirat

<table>
  <tr>
    <td class="col-thirty"><strong>Kode</strong></td>
    <td>ATTR_DISALLOWED_BY_IMPLIED_LAYOUT</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Format</strong></td>
    <td>"The attribute '%1' in tag '%2' is disallowed by implied layout '%3'."</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Perbaikan</strong></td>
    <td>Hapus atribut terlarang dari tag,
      atau tentukan tata letak lain yang mengizinkannya.</td>
  </tr>
</table>

Kesalahan ini terjadi jika Anda tidak menentukan tata letak untuk tag AMP,
dan tata letak tersirat berisi atribut terlarang.
Atribut terlarang untuk jenis tata letak dijelaskan di
[spesifikasi sistem tata letak HTML AMP](https://github.com/ampproject/amphtml/blob/master/spec/amp-html-layout.md).

### Tata letak yang ditentukan tidak didukung oleh tag AMP

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>SPECIFIED_LAYOUT_INVALID</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The specified layout '%1' is not supported by tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Tentukan tata letak yang didukung oleh tag.</td>
  </tr>
</table>

Kesalahan ini terjadi jika tata letak yang ditentukan
untuk tag tidak didukung.
Periksa nilai `supported_layout` untuk tag
di [spesifikasi validator AMP](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).

Perilaku tata letak yang sebenarnya ditentukan oleh atribut `layout`.
Untuk mengetahui lebih banyak tentang cara kerja tata letak,
lihat [Cara Mengontrol Tata Letak](/docs/guides/responsive/control_layout.html) dan
[Spesifikasi sistem tata letak HTML AMP](https://github.com/ampproject/amphtml/blob/master/spec/amp-html-layout.md).

### Atribut tidak diizinkan oleh tata letak tertentu

<table>
  <tr>
    <td class="col-thirty"><strong>Kode</strong></td>
    <td>ATTR_DISALLOWED_BY_SPECIFIED_LAYOUT</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Format</strong></td>
    <td>"The attribute '%1' in tag '%2' is disallowed by implied layout '%3'."</td>
  </tr>
   <tr>
    <td class="col-thirty"><strong>Perbaikan</strong></td>
    <td>Hapus atribut terlarang dari tag,
      atau tentukan tata letak lain yang mengizinkannya.</td>
  </tr>
</table>

Kesalahan ini terjadi jika Anda menentukan tata letak untuk tag AMP,
dan tata letak berisi atribut terlarang.
Atribut terlarang untuk jenis tata letak dijelaskan di
[spesifikasi sistem tata letak HTML AMP](https://github.com/ampproject/amphtml/blob/master/spec/amp-html-layout.md).

### Nilai yang dibutuhkan tata letak tidak valid

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>ATTR_VALUE_REQUIRED_BY_LAYOUT</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"Invalid value '%1' for attribute '%2' in tag '%3' - for layout '%4', set the attribute '%2' to value '%5'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Tentukan atribut ke nilai tertentu.</td>
  </tr>
</table>

Kesalahan ini terjadi jika nilai atribut tata letak tertentu tidak valid.
Untuk memahami hal yang memicu kesalahan ini,
Anda perlu membiasakan diri dengan
[perilaku tata letak yang berbeda](/docs/guides/responsive/control_layout.html#size-and-position-elements).

Anggap tata letak ditetapkan ke `fixed-height` dan
Anda menyertakan nilai numerik `height` dan `width`.
Tata letak `fixed-height` bernilai `height`.
Atribut `width` tidak boleh ada, atau setel ke `auto`.
Validator menampilkan ATTR_VALUE_REQUIRED_BY_LAYOUT.

### Unit lebar dan tinggi tidak konsisten

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>INCONSISTENT_UNITS_FOR_WIDTH_AND_HEIGHT</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"Inconsistent units for width and height in tag '%1' - width is specified in '%2' whereas height is specified in '%3'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Berikan unit lebar dan tinggi yang konsisten.</td>
  </tr>
</table>

Dengan pengecualian `layout=fixed`,
atribut lebar dan tinggi harus dinyatakan dalam unit yang sama.
Jika tidak, hal ini akan memicu kesalahan.

Misalnya, `<amp-img src="" layout="responsive" width="42px" height="42rem">`,
menyebabkan pesan kesalahan:

"Unit lebar dan tinggi pada tag 'amp-img' tidak konsisten- lebar ditentukan dalam 'px' sedangkan tinggi ditentukan dalam 'rem'."

## Kesalahan pemberian template

Laman AMP tidak dapat menyertakan sintaksis pemberian template,
kecuali sintaksis tersebut dalam tag AMP yang
dirancang khusus untuk menyertakan template, misalnya,
[amp-mustache](/docs/reference/extended/amp-mustache.html).

Diperbolehkan menyertakan template di file sumber,
selama keluaran yang dihasilkan file tersebut tidak berisi template
(lihat juga
[Menggunakan prapemrosesan CSS](/docs/guides/responsive/style_pages.html#use-css-preprocessors)).

### Atribut berisi sintaksis template

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>TEMPLATE_IN_ATTR_NAME</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"Mustache template syntax in attribute name '%1' in tag '%2'."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus sintaksis template Mustache dari atribut.</td>
  </tr>
</table>

Kesalahan ini terjadi kapan pun validator menemukan
[sintaksis template Mustache](https://mustache.github.io/mustache.5.html)
di nilai atribut.

### Atribut berisi sintaksis template yang tidak dapat lolos

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>UNESCAPED_TEMPLATE_IN_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The attribute '%1' in tag '%2' is set to '%3', which contains unescaped Mustache template syntax."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Loloskan template Mustache.</td>
  </tr>
</table>

Kesalahan ini terjadi kapan pun validator menemukan
[sintaksis template Mustache yang tidak dapat lolos](https://mustache.github.io/mustache.5.html)
di nilai atribut.

### Atribut berisi sebagian template

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>TEMPLATE_PARTIAL_IN_ATTR_VALUE</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The attribute '%1' in tag '%2' is set to '%3', which contains a Mustache template partial."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus sebagian mustache.</td>
  </tr>
</table>

Kesalahan ini terjadi kapan saja validator menemukan
[Mustache sebagian](https://mustache.github.io/mustache.5.html)
di nilai atribut.

## Kesalahan penghentian

### Tag tidak berlaku lagi

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>DEPRECATED_TAG</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>No error message defined as yet (no deprecated tags).</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Hapus tag yang tidak berlaku lagi.</td>
  </tr>
</table>

Peringatan ini terjadi jika tag AMP yang sebelumnya valid ditemukan di dokumen AMP.
Ini hanya peringatan; dokumen AMP dengan peringatan ini masih tetap valid.
Saat ini tidak ada tag yang tidak berlaku; peringatan ini dipesan untuk penghentian mendatang.

### Atribut tidak berlaku lagi

<table>
  <tr>
  	<td class="col-thirty"><strong>Kode</strong></td>
  	<td>DEPRECATED_ATTR</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Format</strong></td>
  	<td>"The attribute '%1' in tag '%2' is deprecated - use '%3' instead."</td>
  </tr>
   <tr>
  	<td class="col-thirty"><strong>Perbaikan</strong></td>
  	<td>Sebagai praktik yang baik, hapus atribut yang tidak berlaku lagi.</td>
  </tr>
</table>

Peringatan ini terjadi jika atribut AMP yang sebelumnya valid ditemukan di dokumen AMP.
Ini hanya peringatan; dokumen AMP dengan peringatan ini masih tetap valid.

Identifikasikan atribut setiap tag AMP yang tidak berlaku lagi
dengan menelusuri `deprecation` di
[spesifikasi validator AMP](https://github.com/ampproject/amphtml/blob/master/validator/validator-main.protoascii).
</body>
</html>

```

