“弃用 Google AMP!”

探讨了AMP作为Google推动的网页加速项目,如何在优化移动网页体验的同时,成为其控制网络标准和内容的手段。文章分析了Google对AMP版本与常规网页一致性的要求,及其对发布商的影响。

互联网之下,有一个通用的标准究竟是一件好事,还是大厂垄断的手段?

对于诸多开发者而言,想必对 AMP (移动页面加速,Accelerated Mobile Pages,简称AMP)项目应该并不陌生,它有足够的优势去优化移动设备的网页。

不过,随着标准的逐渐统一,本文作者发文表示,AMP 已逐渐成为 Google 统一标准的手段之一,甚至成为默认的构建网页方式。

作者 | polemicdigital

以下为译文:

让我们来谈一谈“移动页面加速” 项目(Accelerated Mobile Pages,简称AMP)。AMP是一个Google的宠物项目,据称“该开源计划旨在塑造更好的网络”。虽然AMP的官方网站非常注重其开源的性质,但事实上,该项目90%的贡献者都来自Google员工,而且项目本身也是Google发起的。所以,让我们面对现实吧:AMP就是一个Google项目。

Google也是各大网站采用AMP的原因。基本上,Google会强迫各大网站(特别是新闻发布商)建立AMP版本形式的文章。对于发布商而言,AMP几乎是强迫性的,因为如果你不使用AMP,那么你的文章就基本不可能出现在Google移动搜索的“头条新闻”循环播出中。

而且由于与台式机上的搜索相比,移动搜索非常受欢迎,所以在如今收入不断降低,且在线竞争日益激烈的时代,发布商想要生存就必须跻身于Google的移动搜索。

如果发布商有选择,他们必然不会选择AMP。为保持新闻站点的平稳运行和良好性能,需要大量资源的支持。而AMP又加重了这种负担,因为他们需要单独创建AMP版本形式的文章,并让这些文章符合不断发展变化的标准。 

所以说,AMP的存在完全是人为的。AMP之所以能活下来不是因为它有很多优点,而是因为Google强迫各大网站采用AMP,否则他们就会失去流量。

 而Google还不满意于此。Google希望利用AMP获得更多。

01

来自Search Console的消息

近日,我的客户收到了来自Google Search Console的消息:

好好看看这些消息。这些都是Google在这些网站的AMP版本中发现的问题:

  • “AMP页面缺少规范页面中应有的所有导航功能,例如目录和/或折叠菜单。”

  • “规范页面允许用户查看和添加评论,但这篇AMP文章不允许。通常这会被用户视为缺少内容。”

  • “规范的URL允许用户直接将内容共享到各社交媒体平台。但该AMP页面上缺少此功能。”

  • “规范页面包含媒体轮播,而AMP页面上的该功能丢失或已损坏。”

基本上,页面上任何AMP版本和常规版本之间的差异都会被视为有待解决的问题。Google希望AMP版本与规范的页面百分百相同。

然而,由于AMP自身的局限性,在AMP版本的文章中实现这些功能并非易事。如果想遵照Google的指示,实现这些功能,需要投入大量的开发资源。从根本上讲,这意味着开发人员必须把他们在普通网站上做过的工作完全在AMP版的网站上重新做一遍。

02

规范的AMP

Google的意思很明显:希望AMP与常规网站完全相同。常规网站中出现的每个元素也应出现在AMP版本中:每个导航项、每个社交媒体共享按钮、每个评论框、每个图片库。

Google希望发布商的AMP版本无论从外观、感觉和行为上都与网站的常规版本完全相同。

那么我们怎样才能用最简单、最具成本效益、问题最少的方法实现这一点?没错,你猜对了:只需使用AMP重新构建一遍整个网站。那么为什么要创建两个版本的网站,为什么不只创建AMP版本的网站呢?这样不就可以大大降低保持网站正常运行的成本了吗?

Google并没有明确表示出来,但是很久以前他们就已经给出了暗示。这正是2018年在阿姆斯特丹举行的AMP大会上的议题,而这些最新的Search Console消息对发布商来说也不是什么微妙的提示:完全将AMP作为网站默认的前端代码库才是困难最少的途径。

这正是Google想要的,他们希望所有网站都百分百AMP,每一个页面都符合AMP,并遵守AMP标准的局限性。

03

“Google形”的网站

网络是一个龙蛇混杂的地方。自网络诞生以来,开发人员就一直在与官方标准斗智斗勇,Netscape和IE等网络浏览器就曾通过引入自己的非官方技术来帮助提升网络的功能,而最终却只是添乱。

最终的结果是千差万别,无政府状态,几乎没有任何两个网站使用相同的代码。你很难找到一个看起来还不错、功能强大且完全兼容W3C的网站。

对于Google这样的搜索引擎来说,其根基就在于掌握人们通过网络发布的内容,这是一个巨大的挑战。Google的爬虫和索引必须非常宽容地对当大量的垃圾内容,而且还要处理这些内容,才能在网络上查找内容。随着网络的不断发展和日趋复杂,Google为此付出了越来越多的努力。

多年来,Google一直在劝告网站管理员创建更好的网站,而“更好”的意思是“更方便Google理解”。Google大力支持XML网站地图和schema.org结构化数据之类的技术,因为这些技术有助于搜索引擎的工作。

而拒绝文件和rel = nofollow等措施可以帮助Google保持链接干净,免受垃圾邮件的侵害。Google开发者网站上发布的所有文章统统旨在将混乱的网络变成一个更干净、更易于理解的网站。换句话说,就是“Google形的网站”。这是一场Google苦战了数十年的战斗。

而Google最新的武器就是AMP。

利用AMP构建整个网络是Google的梦想。AMP页面的加载速度非常快(因此抓取速度非常快)、易于理解(因此必须包含结构化数据),并且没有任何不必要的混乱(因为这违反了标准)。

AMP化的网站可以减轻Google的负担。他们将不再为爬取和搜索网站而苦恼,他们只需稍作努力就可以网页中提取有意义的内容,而且他们还能够在搜索结果中给各个网站排名。

此外,AMP还可以让Google负责整个互联网的托管。AMP页面由Google的AMP缓存负责托管,而不是网站本身的托管环境,Google还可以执行自己的优化以进一步增强用户体验。

如此一来,Google就可以完全控制怎样利用这些内容获益。不再有恶意的广告或网络,所有盈利都获得了Google批准和监管。如果发生任何超出AMP标准限制的事件,则该页面就会成为AMP无效,从AMP缓存中删除,并从Google搜索结果中删除。那么,这个页面也就不存在了。

干净、整洁、同根生、Google形。

04

为Google载歌载舞

这是我们想要的结果吗?我们应该屈从于Google的愿望并拥抱AMP吗?我们应该把网站和内容的控制权移交给Google吗?没错,我们都乐意看到Google接受我们发布的内容,但至少我们能分到一杯羹。

这很容易,不是吗?只需乖乖地听Google的话就行了。别再为艰难的决定而苦苦挣扎,只需松开缰绳,为Google载歌载舞,就像你们公司的命运都交到了Google手中一样。而事实也确实如此。

我知道对此我想说什么吗?没门!

其没有权利决定网络应有的工作方式。因为既不是他们发明了网络,也不是他们普及了网络。

在互联网之下,这发者们需要有一定的自由。

05

回  击

我的客户问我如何处理这些消息。我告诉他们删了。无视Google的说词,不加理会。

Google肯定会继续施压。我等着这些消息变成警告,并最终显示AMP标准失效的错误。

Google想要一个更干净、更整洁、多样性更少的网络,他们会利用所有能用的武器来实现这个目标。正规的AMP只是其中一种武器,他们还有很多。例如,与网络上最受欢迎的CMS的合作等。

一味服从当然很简单。但是,我们也可以反击,并寻找破坏其统治地位的方法。使用其他搜索引擎,或请相关人士调查大厂的垄断情况。

至少,目前,可在你的网站上禁用AMP。 

—— 推 荐 阅 读 ——


点个“在看”必升职加薪喔

(tf2) D:\python\yolov109.25>pip list WARNING: Ignoring invalid distribution -orch (e:\python\anaconda\envs\tf2\lib\site-packages) Package Version ---------------------------- -------------------- absl-py 2.3.1 addict 2.4.0 aiofiles 23.2.1 altair 5.5.0 annotated-types 0.7.0 anyio 4.11.0 asttokens 3.0.0 astunparse 1.6.3 attrs 25.4.0 cachetools 5.5.2 certifi 2025.8.3 charset-normalizer 3.4.3 click 8.1.8 colorama 0.4.6 coloredlogs 15.0.1 contourpy 1.3.0 cycler 0.12.1 decorator 5.2.1 efficientnet_pytorch 0.7.1 einops 0.8.1 exceptiongroup 1.3.0 executing 2.2.1 fastapi 0.119.1 ffmpy 0.6.4 filelock 3.19.1 flatbuffers 25.2.10 fonttools 4.60.1 fsspec 2025.9.0 gast 0.4.0 google-auth 2.40.3 google-auth-oauthlib 0.4.6 google-pasta 0.2.0 gradio 4.31.5 gradio_client 0.16.4 grpcio 1.74.0 h11 0.16.0 h5py 3.14.0 httpcore 1.0.9 httpx 0.28.1 huggingface-hub 0.23.2 humanfriendly 10.0 idna 3.10 importlib_metadata 8.7.0 importlib_resources 6.5.2 intel-openmp 2021.4.0 ipython 8.18.1 jedi 0.19.2 Jinja2 3.1.6 jsonschema 4.25.1 jsonschema-specifications 2025.9.1 keras 2.10.0 Keras-Preprocessing 1.1.2 kiwisolver 1.4.7 libclang 18.1.1 Markdown 3.9 markdown-it-py 3.0.0 MarkupSafe 2.1.5 matplotlib 3.9.4 matplotlib-inline 0.2.1 mdurl 0.1.2 mkl 2021.4.0 mmcv 1.4.0 mmengine 0.10.7 mpmath 1.3.0 narwhals 2.9.0 networkx 3.2.1 numpy 1.24.3 oauthlib 3.3.1 onnx 1.14.0 onnxruntime 1.15.1 onnxruntime-gpu 1.18.0 onnxsim 0.4.36 opencv-python 4.7.0.72 opt_einsum 3.4.0 orjson 3.11.3 packaging 25.0 pandas 2.3.3 parso 0.8.5 pillow 10.4.0 pip 25.2 platformdirs 4.4.0 polars 1.34.0 polars-runtime-32 1.34.0 prompt_toolkit 3.0.52 protobuf 6.33.0 psutil 5.9.8 pure_eval 0.2.3 py-cpuinfo 9.0.0 pyasn1 0.6.1 pyasn1_modules 0.4.2 pycocotools 2.0.7 pydantic 2.12.3 pydantic_core 2.41.4 pydub 0.25.1 Pygments 2.19.2 pyparsing 3.2.5 pyreadline3 3.5.4 python-dateutil 2.9.0.post0 python-multipart 0.0.20 pytorch-wavelets 1.3.0 pytz 2025.2 PyWavelets 1.6.0 pywrap 0.1.0 PyYAML 6.0.1 referencing 0.36.2 regex 2025.10.23 requests 2.32.5 requests-oauthlib 2.0.0 rich 14.2.0 rpds-py 0.27.1 rsa 4.9.1 ruff 0.14.1 safetensors 0.4.3 scipy 1.13.0 seaborn 0.13.2 semantic-version 2.10.0 setuptools 78.1.1 shellingham 1.5.4 six 1.17.0 sniffio 1.3.1 stack-data 0.6.3 starlette 0.48.0 sympy 1.14.0 tbb 2021.11.0 tensorboard 2.10.1 tensorboard-data-server 0.6.1 tensorboard-plugin-wit 1.8.1 tensorflow-estimator 2.10.0 tensorflow-gpu 2.10.0 tensorflow-io-gcs-filesystem 0.31.0 termcolor 3.1.0 thop 0.1.1.post2209072238 timm 0.6.13 tomli 2.3.0 tomlkit 0.12.0 torch 2.4.0+cu118 torchaudio 2.4.0+cu118 torchvision 0.19.0+cu118 tqdm 4.67.1 traitlets 5.14.3 typer 0.20.0 typing_extensions 4.15.0 typing-inspection 0.4.2 tzdata 2025.2 ultralytics 8.3.2 ultralytics-thop 2.0.17 urllib3 2.5.0 uvicorn 0.38.0 wcwidth 0.2.14 websockets 11.0.3 Werkzeug 3.1.3 wheel 0.45.1 wrapt 1.17.3 xgboost 2.1.4 yapf 0.43.0 zipp 3.23.0 这些适配环境中有没有会导致E:\Python\anaconda\envs\tf2\python.exe D:\python\yolov109.25\train.py E:\Python\anaconda\envs\tf2\lib\site-packages\mmengine\optim\optimizer\zero_optimizer.py:11: DeprecationWarning: `TorchScript` support for functional optimizers is deprecated and will be removed in a future PyTorch release. Consider using the `torch.compile` optimizer instead. from torch.distributed.optim import \ Ultralytics YOLOv8.1.34 🚀 Python-3.9.23 torch-2.4.0+cu118 CUDA:0 (NVIDIA GeForce RTX 4050 Laptop GPU, 6140MiB) engine\trainer: task=detect, mode=train, model=ultralytics/cfg/models/v10/yolov10l.yaml, data=datasets_extend/differ.yaml, epochs=1, time=None, patience=100000, batch=16, imgsz=320, save=True, save_period=-1, val_period=1, cache=False, device=None, workers=8, project=None, name=train26, exist_ok=False, pretrained=True, optimizer=auto, verbose=True, seed=0, deterministic=True, single_cls=False, nwdloss=True, iou_ratio=0.6, rect=False, cos_lr=False, close_mosaic=10, resume=False, amp=True, fraction=1.0, profile=False, freeze=None, multi_scale=False, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save_json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, vid_stride=1, stream_buffer=False, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, embed=None, show=False, save_frames=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, show_boxes=True, line_width=None, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, workspace=4, nms=False, lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=7.5, cls=0.5, dfl=1.5, pose=12.0, kobj=1.0, label_smoothing=0.0, nbs=64, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, bgr=0.0, mosaic=1.0, mixup=0.0, copy_paste=0.0, auto_augment=randaugment, erasing=0.4, crop_fraction=1.0, cfg=None, tracker=botsort.yaml, save_dir=D:\python\yolov109.25\runs\detect\train26 Overriding model.yaml nc=80 with nc=3 from n params module arguments 0 -1 1 1856 ultralytics.nn.modules.conv.Conv [3, 64, 3, 2] 1 -1 1 73984 ultralytics.nn.modules.conv.Conv [64, 128, 3, 2] 2 -1 3 279808 ultralytics.nn.modules.block.C2f [128, 128, 3, True] 3 -1 1 295424 ultralytics.nn.modules.conv.Conv [128, 256, 3, 2] 4 -1 6 2101248 ultralytics.nn.modules.block.C2f [256, 256, 6, True] 5 -1 1 137728 ultralytics.nn.modules.block.SCDown [256, 512, 3, 2] 6 -1 6 8396800 ultralytics.nn.modules.block.C2f [512, 512, 6, True] 7 -1 1 268800 ultralytics.nn.modules.block.SCDown [512, 512, 3, 2] 8 -1 3 1744384 ultralytics.nn.modules.block.C2fCIB [512, 512, 3, True] 9 -1 1 656896 ultralytics.nn.modules.block.SPPF [512, 512, 5] 10 -1 1 990976 ultralytics.nn.modules.block.PSA [512, 512] 11 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 12 [-1, 6] 1 0 ultralytics.nn.modules.conv.Concat [1] 13 -1 3 2006528 ultralytics.nn.modules.block.C2fCIB [1024, 512, 3, True] 14 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 15 [-1, 4] 1 0 ultralytics.nn.modules.conv.Concat [1] 16 -1 3 1247744 ultralytics.nn.modules.block.C2f [768, 256, 3] 17 -1 1 590336 ultralytics.nn.modules.conv.Conv [256, 256, 3, 2] 18 [-1, 13] 1 0 ultralytics.nn.modules.conv.Concat [1] 19 -1 3 1875456 ultralytics.nn.modules.block.C2fCIB [768, 512, 3, True] 20 -1 1 268800 ultralytics.nn.modules.block.SCDown [512, 512, 3, 2] 21 [-1, 10] 1 0 ultralytics.nn.modules.conv.Concat [1] 22 -1 3 2006528 ultralytics.nn.modules.block.C2fCIB [1024, 512, 3, True] 23 [16, 19, 22] 1 2826658 ultralytics.nn.modules.head.v10Detect [3, [256, 512, 512]] YOLOv10l summary: 628 layers, 25769954 parameters, 25769938 gradients, 127.2 GFLOPs Freezing layer 'model.23.dfl.conv.weight' AMP: running Automatic Mixed Precision (AMP) checks with YOLOv8n... D:\python\yolov109.25\ultralytics\nn\tasks.py:779: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature. ckpt = torch.load(file, map_location="cpu") D:\python\yolov109.25\ultralytics\utils\checks.py:641: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead. with torch.cuda.amp.autocast(True): D:\python\yolov109.25\ultralytics\engine\trainer.py:276: FutureWarning: `torch.cuda.amp.GradScaler(args...)` is deprecated. Please use `torch.amp.GradScaler('cuda', args...)` instead. self.scaler = torch.cuda.amp.GradScaler(enabled=self.amp) AMP: checks passed ✅ train: Scanning D:\python\yolov109.25\datasets_extend\train\labels.cache... 495 images, 0 backgrounds, 0 corrupt: 100%|██████████| 495/495 [00:00<?, ?it/s] E:\Python\anaconda\envs\tf2\lib\site-packages\mmengine\optim\optimizer\zero_optimizer.py:11: DeprecationWarning: `TorchScript` support for functional optimizers is deprecated and will be removed in a future PyTorch release. Consider using the `torch.compile` optimizer instead. from torch.distributed.optim import \这些问题的出现
最新发布
10-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值