You should: Sign up > Write articles > tell people about your articles > Monetize them > Earn money  > learn/do/earn more

Accelerated Mobile Pages

From Wikiafripedia, the free afripedia (encyclopedia)
Jump to navigation Jump to search

AMP (originally an acronym for Accelerated Mobile Pages[1]) is an open source HTML framework developed by the AMP Open Source Project.[2] It was originally created by Google as a competitor to Facebook Instant Articles and Apple News.[3] AMP is optimised for mobile web browsing and intended to help webpages load faster.[4] AMP pages may be cached by a CDN, such as Microsoft Bing or Cloudflare's AMP caches, which allows pages to be served more quickly.[5][6][7]

AMP was first announced on October 7, 2015.[8] After a technical preview period, AMP pages began appearing in Google mobile search results in February 2016.[9][10] AMP was initially criticized for potentially giving further control over the web to Google.[11] The AMP Project announced it would move to an open governance model on September 18, 2018.[12][13]

History[edit source | edit]

Announcement and launch[edit source | edit]

The AMP Project was announced by Google on October 7, 2015, following discussions with its partners in the Digital News Initiative (DNI), and other news publishers and technology companies around the world, about improving the performance of the mobile web. More than 30 news publishers and several technology companies (including Twitter, Pinterest, LinkedIn and WordPress) were initially announced as collaborators in the AMP Project.[14][15]

AMP pages first appeared to web users in February 2016, when Google began to show the AMP versions of webpages in mobile search results. Initially links to AMP pages were restricted to a “Top Stories” section of Google's mobile search results; by September 2016 Google started linking to AMP content in the main mobile search results area.[16] AMP links in Google search are identified with an icon.

According to one of the co-founders of the AMP Project, Malte Ubl, AMP was originally called PCU,[17] which stood for Portable Content Unit.

Growth and expansion[edit source | edit]

In September 2016, Microsoft announced support for AMP in the Bing apps for iOS and Android.[18]

In February 2017, a year after the public launch of AMP, Adobe reported AMP pages accounted for 7% of all web traffic for top publishers in the United States.[19]

In May 2017, Google reported 900,000 web domains were publishing AMP pages with more than two billion AMP pages published globally.[20]

In June 2017, Twitter started linking to AMP pages from its iOS and Android apps.[21]

In September 2018, Microsoft began rolling out its own Bing AMP viewer and AMP cache.[22]

As announced by AMP's tech lead Malte at AMP Conf '19, AMP is now just AMP, and does not stand for Accelerated Mobile Pages anymore.[23]

AMP Framework[edit source | edit]

Template:Advert section

AMP HTML[edit source | edit]

The AMP framework consists of three components: AMP HTML, which is standard HTML markup with web components; AMP JavaScript, which manages resource loading; and AMP caches, which serve and validate AMP pages.[24]

Most AMP pages are delivered by Google's AMP cache, but other companies can support AMP caches. Internet performance and security company Cloudflare launched an AMP cache in March 2017.[25]

AMP Stories[edit source | edit]

In 2018, Google introduced AMP Stories, a visually tappable experience that provides content publishers with a mobile-focused format for delivering news and information as visually rich, tap-through stories. In 2019, they announced that they will be rolling out new dedicated placement on the SERP for AMP Stories, starting with travel category first. On April 17, on their AMP Conference in Tokyo, they also announced ads and Google Analytics integration, and option to embed new types of content — specifically Twitter posts, Google Maps, and YouTube videos that they will be rolling out later in 2019.[citation needed]

AMP Stories Editors and Builders[edit source | edit]

Since Google launched the AMP Story format, there have been a number of new SaaS that offer fast, no-code options to create AMP Stories. These tools are fit for content publishers who want to exploit the new technology but do not know how to code, or who wish to publish content in an accelerated manner without manually defining styling and layout.[citation needed]

AMP Email[edit source | edit]

In 2019, Google announced the new AMP Email section of the AMP framework. AMP for email allows senders to include AMP components inside rich engaging emails, making modern app functionality available within email. The AMP email format provides a subset of AMP HTML components for use in email messages, allowing recipients of AMP emails to interact dynamically with content directly in the message.[citation needed]

Technology[edit source | edit]

Online format[edit source | edit]

AMP pages are published on-line and can be displayed in most current browsers.[26] When a standard webpage has an AMP counterpart, a link to the AMP page is usually placed in an HTML tag in the source code of the standard page. Because most AMP pages are easily discoverable by web crawlers, third parties such as search engines and other referring websites can choose to link to the AMP version of a webpage instead of the standard version.

Third-party integration[edit source | edit]

Any organization or individual can build products or features which will work on AMP pages, provided they comply with the AMP Project specifications. As of July 2017, the AMP Project's website listed around 120 advertising companies and around 30 analytics companies as AMP Project participants.[27]

Performance[edit source | edit]

Google reports that AMP pages served in Google search typically load in less than one second and use ten times less data than the equivalent non-AMP pages.[28] CNBC reported a 75% decrease in mobile page load time for AMP Pages over non-AMP pages,[29] while Gizmodo reported that AMP pages loaded three times faster than non-AMP pages.[30]

An academic paper about AMP[31] reveals that AMP pages' page load time is 2.5 times faster than non-AMP versions without pre-rendering in Google's search result page, and the AMP version is approximately nine times faster than the non-AMP version with the pre-rendering.

Parity with canonical pages[edit source | edit]

Google has announced that as of February 1, 2018, it will require the content of canonical pages and those displayed through AMP be substantially the same.[32] This is aimed at improving the experience of users by avoiding common difficulties with the user interface, and increase security and trust (see below).

Reception[edit source | edit]

General criticism[edit source | edit]

AMP has been widely criticized by many in the tech industry[33][34][35][36][37][38][39] for being an attempt by Google to exert its dominance on the Web by dictating how websites are built and monetized, and that "AMP is Google's attempt to lock publishers into its ecosystem".[40] AMP has also been linked to Google's attempt to deprecate URLs so that users will not be able to immediately see whether they are viewing a webpage on the open Web or an AMP page that is hosted on Google's servers.[41]

Joshua Benton, director of the Nieman Journalism Lab at Harvard University, said: "there is a sense in which AMP is a Google-built version of the web. We are moving from a world where you can put anything on your website to one where you can’t because Google says so."[42] Ramon Tremosa, a Spanish member of the European Parliament, said: "AMP is an example of Google dialing up its anti-competitive practices under the nose of the competition regulators."[42]

Comparison to other formats[edit source | edit]

AMP is often compared to Facebook Instant Articles and Apple News.[43][44] All three formats were announced in 2015 with the stated goal of making mobile content faster and easier to consume.[45][46] AMP Project supporters claim that AMP is a collaborative effort among publishers and technology companies, and that AMP is designed to work on the web instead of proprietary mobile apps.

Google's Richard Gingras said:

"There's a very big difference between having a proprietary platform that says it's open, and having an open-source platform that is open to anyone to modify and adapt. It's the difference between saying come into my walled garden vs. not having a walled garden."[47]

However, some critics believe that AMP is an impending walled garden as Google begins to host AMP-restricted versions of their websites directly on google.com:

They say AMP is not actually supporting the open web because it is a "fork" or variation on HTML and one that Google essentially controls...Some publishers have complained that as Google prioritizes AMP links—as it recently said it will do in mobile search—media companies will lose even more control because AMP pages are hosted and controlled by Google. "Our mobile search traffic is moving to be majority AMP (Google hosted and not on our site) which limits our control over UI, monetization et al," said one digital media executive, quoted in a Fortune article.[47]

Google control[edit source | edit]

Matthew Ingram of Fortune expressed concerns about Google's role and motives regarding the AMP Project:

"In a nutshell, these publishers are afraid that while the AMP project is nominally open-source, Google is using it to shape how the mobile web works, and in particular, to ensure a steady stream of advertising revenue… More than anything else, the concerns that some publishers have about AMP seems to be part of a broader fear about the loss of control over distribution in a platform-centric world, and the risks that this poses to traditional monetization methods such as display advertising."[47]

These charges were rebutted by Google. Madhav Chinnappa stated that AMP must be a collaborative industry initiative in order for it to succeed in the long term:

"I get a little bit irritated when sometimes people call it Google's AMP, because it's not … AMP was created as an open source initiative and that for me is the reason for its success."[48]

In September 2018, Google began to transition AMP to a more open governance model, with a technical steering committee composed of AMP-using publishers.[49]

Problems on pre-rendering[edit source | edit]

AMP's instantaneous webpage access speed is partly from its pre-rendering in Google's search result page. This pre-rendering is out of the user's control but can fetch an unwanted page.[31]

"AMP prefetching and pre-rendering results in some additional data (and power) use with each search. The average 1.4 MB of additional data per search that is used for pre-rendering an AMP page that the user may not visit is not trivial overhead for certain users with limited data plans."

Furthermore, this can be a privacy issue, since the unwanted downloaded data will be logged even though the user does not choose to download it.

WordPress[edit source | edit]

December 7, 2018, AMP announced their official WordPress plugin,[50] which allowed to transform WordPress websites into include AMP-ready pages.

Monetization[edit source | edit]

Some publishers reported that AMP pages generate less advertising revenue per page than non-AMP pages.[51] The Wall Street Journal's Jack Marshall said:

"AMP pages rely heavily on standardized banner ad units, and don't allow publishers to sell highly-customized ad units, sponsorships or pop-up ads as they might on their own properties"[52]

Other publishers have reported better success with AMP monetization. The Washington Post has been able to generate approximately the same amount of revenue from AMP pages as from standard mobile pages, according to director of product Joey Marburger. CNN chief product officer Alex Wellen said AMP Pages "largely monetize at the same rate" as standard mobile pages.[53]

To improve advertising performance, the AMP Project launched the AMP Ads Initiative which includes support for more advertising formats and optimizations to improve ad load speed.[54][55]

Exploitation for malicious purposes[edit source | edit]

Some observers believe AMP allows more effective phishing attempts. One serious flaw, noted by tech writer Kyle Chayka, is that disreputable parties who misuse AMP (as well as Facebook's similar Instant Articles) enable junk websites to share many of the same visual cues and features found on legitimate sites. "All publishers end up looking more similar than different. That makes separating the real from the fake even harder," said Chayka.[56]

In September 2017, Russian hackers used an AMP vulnerability in phishing e-mails sent to investigative journalists critical of the Russian government, and hacked into their websites.[56] Google announced on November 16, 2017 that it will stop allowing sites using AMP for formatting to bait-and-switch sites.[32] Google said beginning February 2018, AMP pages must contain content nearly identical to that of the standard page they're replicating.

References[edit source | edit]

  1. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  2. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  3. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  4. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  5. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  6. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  7. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  8. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  9. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  10. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  11. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  12. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  13. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  14. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  15. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  16. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  17. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  18. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  19. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  20. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  21. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  22. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  23. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  24. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  25. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  26. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  27. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  28. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).[permanent dead link]
  29. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  30. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  31. 31.0 31.1 Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  32. 32.0 32.1 Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  33. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  34. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  35. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  36. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  37. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  38. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  39. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  40. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  41. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  42. 42.0 42.1 Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  43. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  44. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  45. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  46. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  47. 47.0 47.1 47.2 Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  48. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  49. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  50. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  51. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  52. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  53. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  54. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  55. Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).
  56. 56.0 56.1 Lua error in ...ribunto/includes/engines/LuaCommon/lualib/mwInit.lua at line 23: bad argument #1 to 'old_ipairs' (table expected, got nil).

External links[edit source | edit]