Redmi Note 9S向けにAndroid 12ベースのMIUI 13がリリースとシステムアプリ消し

Mi Bunny

2年前に発売されたXiaomiのRedmi Note 9SはAndroid 11更新提供こそXiaomiの中でも最速リリース組だったがAndroid 12ベースのMIUI 13は完全な後回し組となった。中国向けモデル、グローバル向けの新しめのモデルには今年の春以降に順次Android 12 + MIUI 13 (一部モデルはAndroid 11 + MIUI 13)のリリースが始まったがRedmi Note 9Sは2022年Q3ということで夏以降〜秋頃でいつになるかは判らないという状態。
と、思ったら7月下旬に8月前半中のリリースというスケジュールのリークがあった。なのでお盆休みかなと思ったら意外にも8月6日という早めのリリースとなった。欧州向けとグローバル向けが同時リリースかと思っていたらグローバル向けが先に出た。なお、リリースといっても8月6日時点ではMiパイロット向けなのでユーザー全員に提供されるものではありません。OTAで提供される更新であれば数日の内にMiパイロットに登録しているユーザーに順次提供されると思われますが、スマホ側でMiアカウントにログインしておく必要があります。OTAでない場合はRecoveryロムを別途入手してカスタムリカバリーで焼くという作業が必要かと思われます。8月6日のリリースはV13.0.2.0.SJWMIXMで、13.0.1.0はリリースにはなっていません。

2022年9月4日追記:
Recoveryだけでなく既にFastbootの提供も始まっているので、これまでのバージョンも含め通常であれば安定版のRecovery/Fastboot出揃って正式リリースとに進むということになる筈ですが、不思議なことにXiaomi CommunityではRedmi Note 9SのAndroid 12ベースのMIUI 13については全くのダンマリです。提供が始まったこともアナウンスされていません。OTAでの提供開始も確認できていません。他所の情報では「限定リリース」ということになっているので一部の国と地域では(OTAを含めて)提供が始まっている筈です。

2022年9月20日追記:
8月〜9月始めにXiaomiのコミュニティーの更新があったようで古い書き込みが読み出せなくなったのと検索システムが最適化されていないようで情報が探しにくくなっているようです。Redmi Note 9シリーズ(Note 9Sを含む)のファームウエア情報を纏めて提供されているスーパーモデレータのhappybuddhistさんが8月25日にアナウンスを出していました。
MIUI 13 Global Stable ROM v13.0.2.0.SJWMIXM with Android 12 for Redmi Note 9S Released: Download Now!
この記事本文ではOTAについては書かれていないのですが、コメントでhappybuddhistさんが、「リージョンを変更して再起動してから、もう一度確認してください。それでも OTA アップデートを受信しない場合は、ここからリカバリ ROM をダウンロードし、アップデータ アプリを介して手動でフラッシュすることができます。」と書いていることから、やはりOTAでの更新提供が始まっている国/地域があるようです。Android設定の「追加設定」から「地域」を開き日本以外の何処かの国(日本向けRedmi Note 9Sはグローバルロムなので少なくとも欧州(+南米の一部他)/インド/トルコ/ロシアは違う)を選択して「再起動してから」更新確認します。更新できたら日本に戻すのをお忘れなく。このことは5chのRedmi Note 9Sスレに書いたのですが「がとらぼ」に書くのを忘れてました。スミマセン
一部の国には「エジプト」が含まれるようです。
今回はメジャーバージョンの更新なので更新後にファクトリーリセットするかそれが無理ならキャッシュ削除を実行するべきでしょう。両方できない場合は更新から半日〜数日ほど変な挙動が発生することがあります。古いキャッシュが無くなれば殆どの変な挙動はなくなるでしょう。

Redmi Note 9S向けにAndroid 12ベースのMIUI 13がリリース 1
Android 11ベースのMIUI 12.5からAndroid 12ベースのMIUI 13になりました。更新後は古いAndroidのデータが残ってシステムだけが更新された状態です。AndroidやMIUIのメジャー更新時は「できるなら」初期化(ファクトリーリセット)した方がトラブルは少なくなります。この画像は初期化してAndroidの初期設定直後のホーム画面です。

Redmi Note 9S向けにAndroid 12ベースのMIUI 13がリリース 2
バージョン表示の画面。Android 12で且つMIUI 13.0.2であることが示されています。今回は8月のリリースですがAndroidセキュリティーパッチは7月度です。(8月6日時点でXiaomiスマホ向けで8月度のAndroid セキュリティーパッチ入りのファームウエアは数えられる程度のモデル向けにしか提供されていません。)

Redmi Note 9S向けにAndroid 12ベースのMIUI 13がリリース 3
初期化直後。毎度のことだが不要なアプリがたくさん。システムアプリですらXiaomiのスマホには要らないのが多い。

Redmi Note 9S向けにAndroid 12ベースのMIUI 13がリリース 4
初期化後、所用で5時間ほど触れず。
で、触れない間にMIUI標準搭載のクリーナーアプリから通知が出ていた。長く使っていないアプリを削除して空き容量を増やせとのこと。
通知をタップすると「クリーナー」アプリが開く。「アプリをアンインストール」をクリック。

Redmi Note 9S向けにAndroid 12ベースのMIUI 13がリリース 5
何故かシステムアプリが3つ削除対象になっている。リスト右側の○をクリックしてチェックし、画面下部の「○○をアンインストール」で削除できた。
というか、初期化から4時間で「長期間使用していないアプリ」をリストアップするのも、システムアプリが削除対象に出るのも、システムアプリが削除できてしまうのもダメでしょ?クリーナーアプリの除外アプリリストが適切に作成されていないのかしら?
とはいえ、今回リストアップされた3つのアプリの内、「壁紙カルーセル」は残しておくと頻繁に表示されて壁紙を変えろとうるさいので削除する予定だったアプリ。他の2つもどうでも良いのでやはり素直に削除した。

XIaomiのグローバルモデルは広告が表示されたり無駄に情報を収集する所謂bloatwareがたくさん。初期化したら毎度の不要なシステムアプリ消しを実行する。MIUIのメジャーバージョンが変わると入っているシステムアプリが微妙に変わるので消して良いのかそうでないのか悩むところが幾つか。

システムアプリの一覧
$ adb shell pm list package
package:com.miui.screenrecorder
package:com.google.android.networkstack.tethering
package:com.xiaomi.cameratest
package:com.google.android.apps.subscriptions.red
package:com.android.cts.priv.ctsshim
package:com.google.android.youtube
package:com.qualcomm.qti.qcolor
package:com.android.internal.display.cutout.emulation.corner
package:com.google.android.ext.services
package:com.android.internal.display.cutout.emulation.double
package:com.android.providers.telephony
package:com.android.dynsystem
package:com.miui.powerkeeper
package:com.goodix.fingerprint
package:com.google.android.googlequicksearchbox
package:com.miui.fm
package:com.google.android.cellbroadcastservice
package:com.android.providers.calendar
package:com.google.android.apps.googleassistant
package:com.android.providers.media
package:com.milink.service
package:com.qti.service.colorservice
package:com.google.android.onetimeinitializer
package:com.google.android.ext.shared
package:com.android.internal.systemui.navbar.gestural_wide_back
package:com.xiaomi.powerchecker
package:com.xiaomi.account
package:com.miui.phone.carriers.overlay.vodafone
package:com.android.wallpapercropper
package:com.xiaomi.cameratools
package:miui.systemui.plugin
package:com.xiaomi.mi_connect_service
package:com.xiaomi.micloud.sdk
package:com.android.updater
package:com.android.externalstorage
package:com.qualcomm.uimremoteclient
package:com.android.htmlviewer
package:com.miui.extraphoto
package:com.miui.securityadd
package:com.qualcomm.qti.uceShimService
package:com.android.companiondevicemanager
package:com.miui.gallery
package:com.android.mms.service
package:com.mi.healthglobal
package:com.miui.msa.global
package:com.qualcomm.qti.qms.service.connectionsecurity
package:com.android.providers.downloads
package:com.longcheertel.midtest
package:com.xiaomi.payment
package:com.google.android.apps.messaging
package:com.miui.securitycenter
package:com.android.internal.systemui.onehanded.gestural
package:vendor.qti.hardware.cacert.server
package:android.autoinstalls.config.Xiaomi.qssi
package:com.qualcomm.qti.telephonyservice
package:com.qualcomm.qti.performancemode
package:com.miui.videoplayer
package:com.qualcomm.qti.ridemodeaudio
package:vendor.qti.iwlan
package:com.google.android.configupdater
package:com.google.android.providers.media.module
package:com.google.android.overlay.modules.permissioncontroller
package:com.android.soundrecorder
package:com.qualcomm.uimremoteserver
package:com.qti.confuridialer
package:com.miui.guardprovider
package:com.android.providers.downloads.ui
package:com.android.vending
package:com.android.pacprocessor
package:com.android.simappdialog
package:com.miui.backup
package:com.android.settings.overlay.miui
package:com.miui.notification
package:android.overlay.common
package:com.miui.micloudsync
package:com.xiaomi.barrage
package:com.android.internal.display.cutout.emulation.hole
package:com.android.internal.display.cutout.emulation.tall
package:com.miui.daemon
package:com.android.networkstack.overlay
package:com.android.certinstaller
package:com.android.carrierconfig
package:com.google.android.marvin.talkback
package:com.android.internal.systemui.navbar.threebutton
package:com.qti.qualcomm.datastatusnotification
package:android
package:com.android.hotwordenrollment.xgoogle
package:com.android.systemui.notch.overlay
package:com.qualcomm.qti.callfeaturessetting
package:com.qualcomm.wfd.service
package:com.miui.hybrid
package:android.miui.overlay
package:com.miui.securitycore
package:com.qti.qualcomm.deviceinfo
package:com.android.egg
package:com.android.mtp
package:com.android.nfc
package:com.android.ons
package:com.android.stk
package:com.android.backupconfirm
package:com.xiaomi.simactivate.service
package:com.goodix.gftest
package:com.longcheertel.sarauth
package:com.miui.phrase
package:com.miui.player
package:com.miui.miservice
package:com.android.provision
package:org.codeaurora.ims
package:com.google.android.gm
package:android.overlay.target
package:com.miui.system
package:com.google.android.overlay.gmsconfig.common
package:com.qti.pasrservice
package:com.miui.cleaner
package:com.android.settings.intelligence
package:com.miui.global.packageinstaller
package:com.miui.miwallpaper.overlay.customize
package:com.android.internal.systemui.navbar.gestural_extra_wide_back
package:com.google.android.permissioncontroller
package:com.miui.systemui.devices.overlay
package:com.miui.compass
package:com.qualcomm.qti.dynamicddsservice
package:com.google.android.setupwizard
package:com.miui.rom
package:com.miuix.editor
package:com.qualcomm.qti.xrvd.service
package:com.qualcomm.qcrilmsgtunnel
package:com.android.providers.settings
package:com.android.sharedstoragebackup
package:com.facebook.services
package:com.android.printspooler
package:com.android.hotwordenrollment.okgoogle
package:com.miui.misound
package:com.qualcomm.qti.services.systemhelper
package:com.android.wifi.resources.overlay.common
package:org.ifaa.aidl.manager
package:com.android.dreams.basic
package:com.google.android.overlay.modules.ext.services
package:com.android.incallui
package:com.android.systemui.gesture.line.overlay
package:com.fido.xiaomi.uafclient
package:com.miui.bugreport
package:com.android.se
package:com.android.inputdevices
package:com.google.android.apps.wellbeing
package:com.fido.asm
package:com.google.android.dialer
package:com.android.bips
package:com.qti.dpmserviceapp
package:com.google.android.captiveportallogin
package:com.google.android.overlay.gmsconfig.comms
package:com.fingerprints.extension.service
package:com.google.android.overlay.gmsconfig.geotz
package:com.qti.xdivert
package:com.android.musicfx
package:com.xiaomi.mircs
package:com.android.systemui.overlay.miui
package:com.android.settings.overlay.common
package:com.google.android.apps.maps
package:com.google.android.modulemetadata
package:com.miui.cloudbackup
package:com.miui.wallpaper.overlay
package:com.miui.face.overlay.miui
package:com.android.cellbroadcastreceiver
package:com.google.android.webview
package:com.google.android.overlay.modules.documentsui
package:com.google.android.networkstack
package:com.google.android.contacts
package:com.android.server.telecom
package:com.android.server.telecom.overlay.miui
package:com.google.android.syncadapters.contacts
package:com.android.keychain
package:com.qti.snapdragon.qdcm_ff
package:com.android.wifi.resources.overlay.target
package:com.android.camera
package:com.android.chrome
package:com.xiaomi.xmsf
package:com.google.android.packageinstaller
package:com.miui.mishare.connectivity
package:com.google.android.gms
package:com.google.android.gsf
package:com.google.android.ims
package:com.google.android.tts
package:com.android.wifi.resources
package:com.android.phone.overlay.common
package:com.android.carrierconfig.overlay.common
package:com.google.android.apps.walletnfcrel
package:com.android.calllogbackup
package:com.miui.freeform
package:com.google.android.partnersetup
package:android.aosp.overlay
package:com.android.systemui.overlay.common
package:com.android.cameraextensions
package:com.xiaomi.xmsfkeeper
package:com.android.server.telecom.overlay.common
package:com.android.localtransport
package:com.google.android.overlay.gmsconfig.gsa
package:com.miui.miwallpaper.overlay
package:com.android.carrierdefaultapp
package:com.xiaomi.mipicks
package:com.miui.wallpaper.overlay.customize
package:com.qualcomm.qti.remoteSimlockAuth
package:com.xiaomi.finddevice
package:com.qualcomm.qti.devicestatisticsservice
package:com.android.theme.font.notoserifsource
package:com.android.proxyhandler
package:com.xiaomi.joyose
package:com.android.internal.display.cutout.emulation.waterfall
package:com.qualcomm.qti.workloadclassifier
package:com.mi.android.globalFileexplorer
package:com.miui.notes
package:com.miui.wmsvc
package:com.google.android.connectivity.resources
package:com.google.android.overlay.modules.permissioncontroller.forframework
package:com.xiaomi.misettings
package:com.google.android.feedback
package:com.google.android.printservice.recommendation
package:com.xiaomi.midrop
package:com.google.android.calendar
package:com.miui.cloudservice
package:com.android.managedprovisioning
package:com.miui.hybrid.accessory
package:com.fingerprints.sensortesttool
package:com.miui.core.internal.editor.services
package:com.android.soundpicker
package:com.tencent.soter.soterserver
package:com.google.android.documentsui
package:com.android.dreams.phototable
package:com.miui.audiomonitor
package:com.miui.touchassistant
package:com.google.mainline.telemetry
package:com.android.providers.partnerbookmarks
package:com.android.smspush
package:com.miui.calculator
package:com.android.wallpaper.livepicker
package:com.android.apps.tag
package:com.miui.miwallpaper
package:com.android.imsserviceentitlement
package:com.facebook.system
package:com.android.systemui.navigation.bar.overlay
package:com.xiaomi.bluetooth
package:com.longcheertel.AutoTest
package:com.google.android.cellbroadcastservice.overlay.miui
package:com.google.android.networkstack.permissionconfig
package:com.android.storagemanager
package:com.wdstechnology.android.kryten
package:com.miui.analytics
package:com.android.bookmarkprovider
package:com.android.settings
package:com.qualcomm.qti.cne
package:com.qualcomm.qti.ims
package:com.qualcomm.qti.lpa
package:com.qualcomm.qti.uim
package:com.miui.weather2
package:org.mipay.android.manager
package:com.google.android.projection.gearhead
package:com.qualcomm.location
package:com.xiaomi.scanner
package:com.google.android.apps.turbo
package:com.android.thememanager.gliobal_config.config.overlay
package:com.android.cts.ctsshim
package:com.google.android.overlay.modules.modulemetadata.forframework
package:com.miui.yellowpage
package:com.qualcomm.qti.uimGbaApp
package:com.caf.fmradio
package:com.qti.diagservices
package:com.miui.systemui.carriers.overlay
package:com.miui.systemui.overlay.devices.android
package:com.qualcomm.qti.services.secureui
package:com.android.vpndialogs
package:com.longcheertel.cit
package:com.android.phone
package:com.android.overlay.gmstelephony
package:com.android.shell
package:com.android.wallpaperbackup
package:com.android.providers.blockednumber
package:com.miui.screenshot
package:com.android.overlay.gmstelecomm
package:com.android.providers.userdictionary
package:com.android.emergency
package:com.qualcomm.qti.seccamservice
package:com.android.hotspot2.osulogin
package:com.qualcomm.qti.qdma
package:com.qualcomm.qti.xrcb
package:com.google.android.gms.location.history
package:com.android.internal.systemui.navbar.gestural
package:com.android.location.fused
package:com.android.deskclock
package:com.android.systemui
package:com.miui.phone.carriers.overlay.h3g
package:com.miui.core.internal.services
package:com.android.wifi.resources.xiaomi
package:com.android.bluetoothmidiservice
package:com.qualcomm.qti.confdialer
package:com.qualcomm.qti.poweroffalarm
package:com.qti.ltebc
package:com.google.android.cellbroadcastreceiver.overlay.miui
package:com.qti.phone
package:com.mi.globallayout
package:com.facebook.appmanager
package:com.xiaomi.discover
package:com.android.thememanager
package:com.android.traceur
package:com.miui.fmservice
package:com.google.android.cellbroadcastreceiver
package:com.qualcomm.qti.qccauthmgr
package:com.lbe.security.miui
package:com.android.bluetooth
package:com.qualcomm.timeservice
package:com.mi.globalminusscreen
package:com.qualcomm.atfwd
package:com.qualcomm.embms
package:com.android.providers.contacts
package:vendor.qti.imsrcs
package:com.android.internal.systemui.navbar.gestural_narrow_back
package:com.android.cellbroadcastreceiver.overlay.common
package:com.miui.core
package:com.miui.face
package:com.miui.home
package:com.google.android.inputmethod.latin
package:com.google.android.apps.restore

黄字は「がとらぼ」の中の人が要らないと判断したシステムアプリ。

上のリストにはありませんが、
com.google.android.apps.subscriptions.redは、Google Oneアプリです。
com.zhiliaoapp.musicallyは、TikTokアプリです。
sg.bigo.liveはビゴライブです。

以下、システムアプリの削除
$ adb shell pm uninstall -k --user 0 com.facebook.appmanager
Success
$ adb shell pm uninstall -k --user 0 com.miui.yellowpage
Success
$ adb shell pm uninstall -k --user 0 com.facebook.system
Success
$ adb shell pm uninstall -k --user 0 com.tencent.soter.soterserver
Success
$ adb shell pm uninstall -k --user 0 com.miui.hybrid.accessory
Success
$ adb shell pm uninstall -k --user 0 com.miui.cloudservice
Success
$ adb shell pm uninstall -k --user 0 com.xiaomi.joyose
Success
$ adb shell pm uninstall -k --user 0 com.miui.mishare.connectivity
Success
$ adb shell pm uninstall -k --user 0 com.miui.cloudbackup
Success
$ adb shell pm uninstall -k --user 0 com.miui.cleaner
Success
$ adb shell pm uninstall -k --user 0 com.facebook.services
Success
$ adb shell pm uninstall -k --user 0 com.miui.hybrid
Success
$ adb shell pm uninstall -k --user 0 com.miui.micloudsync
Success
$ adb shell pm uninstall -k --user 0 com.miui.backup
Success
$ adb shell pm uninstall -k --user 0 com.miui.videoplayer
Success
$ adb shell pm uninstall -k --user 0 com.xiaomi.payment
Success
$ adb shell pm uninstall -k --user 0 com.xiaomi.micloud.sdk
Success
$ adb shell pm uninstall -k --user 0 com.milink.service
Success
$ adb shell pm uninstall -k --user 0 com.miui.fm
Success
$ adb shell pm uninstall -k --user 0 com.google.android.youtube
Success
$ adb shell pm uninstall -k --user 0 com.mi.android.globalFileexplorer
Success
$ adb shell pm uninstall -k --user 0 com.miui.notes
Success
$ adb shell pm uninstall -k --user 0 com.miui.fmservice
Success
$ adb shell pm uninstall -k --user 0 com.xiaomi.simactivate.service
Success
$ adb shell pm uninstall -k --user 0 com.xiaomi.mi_connect_service
Success
$ adb shell pm uninstall -k --user 0 com.xiaomi.mircs
Success
$ adb shell pm uninstall -k --user 0 com.miui.analytics
Success
$ adb shell pm uninstall -k --user 0 com.miui.bugreport
Success
$ adb shell pm uninstall -k --user 0 com.xiaomi.midrop
Success
$ adb shell pm uninstall -k --user 0 com.google.android.apps.wellbeing
Success
$ adb shell pm uninstall -k --user 0 com.xiaomi.mipicks
Success
$ adb shell pm uninstall -k --user 0 com.google.android.apps.subscriptions.red
Success
$ adb shell pm uninstall -k --user 0 com.android.thememanager
Success
$ adb shell pm uninstall -k --user 0 com.android.thememanager.gliobal_config.config.overlay
Success
$ adb shell pm uninstall -k --user 0 com.caf.fmradio
Success
$ adb shell pm uninstall -k --user 0 com.miui.msa.global
Success

削除するのは怖いということであれば「無効化」のdisableをuninstallの代わりに入力。
削除(or無効化)コマンド送信後にSuccessが表示されることを確認する。

まぁ、削除といっても復活させられるので怖がる必要はないんだけど。
たとえば、上で削除したテーマ選択関係の com.android.thememanager と com.android.thememanager.gliobal_config.config.overlay は、通常運用では削除状態で害は無いが、例えば時計でアラーム音を変更したいとなったときに曲の選択画面が出ないというような問題がある。

$ adb shell cmd package install-existing com.android.thememanager
Package com.android.thememanager installed for user: 0
$ adb shell cmd package install-existing com.android.thememanager.gliobal_config.config.overlay
Package com.android.thememanager.gliobal_config.config.overlay installed for user: 0

このように adb shell cmd package install-existing 削除済みシステムアプリ名 で復活できる。通常は復活後すぐに使えるようになるのでシステム再起動は不要。

Redmi Note 9S向けにAndroid 12ベースのMIUI 13がリリース 6
「がとらぼ」の中の人が要らないと思ったシステムアプリを削除した。ドロワーは1画面に全て収まる程度になった。頑張ればさらに半分くらいにもできるだろうが、そこまでする必要もないかなと。個人的には「セキュリティ」とかは要らないのだが、これは消すとトラブる系のアプリなので注意。

MIUI 12.5から何が変わったかと見回しても何か何も違わないようでいて細かい部分は特に画面の切り替わりはちょこちょこ変わってるっぽい。グローバル向け12.5.6.0.RJWMIXMは(問題ありで取り下げられたバージョン)アプリの切り替えがガタガタでWi-FiのAP間の切り替えが異常に悪かった(修正前に戻った?)のでこのあたりが改善されて非常にスムース感が高くなった。
TelegramのRN9SのグループでV13.0.2.0.SJWMIXMのリリースから24時間以内に報告されたバグらしいものはWi-Fiの5GHzの感度が低いというものがあるようです。「がとらぼ」の中の人はこの問題は実感していません。
ちょこっと使った範囲ではRedmi Note 9Sでは新しいMIUI 13は悪いバージョンではなさそう。

MIUI 13で変わったところで気をつけたいところ2点。

Wi-FiのAPの設定で「プライバシー」が「ランダムなMACを使用」が初期値になったので、MACアドレスフィルタリングをかけているAPに接続するのであれば「デバイスのMAC」に変更しなければ「全然つながんねーよ」ということになる。MACアドレスフィルタリングはセキュリティ面ではほぼ意味無い(ガチ勢相手には無駄)が「子供のタダ乗り避け」くらいには役に立つこともあるのかなという点では利用したらダメということはない。ただ、Wi-Fi AP側のMACアドレス管理の手間を考えると「子供のタダ乗り避け」と見合うかは疑問ですが。

更新して初期化後、セットアップウィザードに従いAndroid の初期設定を行う。このとき、求められる項目全ての設定を行わないと、Google Playのアプリ更新が一時保留になる。これはAndroid 11 + MIUI 12系も同じだった筈。
今回、Android 12 + MIUI 13になって、セットアップで必要な項目がよくわからない。通知にセットアップが済んでない旨が表示されなければ終わりかと思うがそうではない?または、Google Playの一時保留判断がおかしいのか一時保留が自動で解除されず悩まされた。結局、一時保留になっているのを手動で更新キャンセルにして再度「更新」させたところ普通に更新できるようになった。わかりにくすぎると思う。

関連記事:

XML Sitemap & Google Newsというプラグイン (WordPress)

XML Sitemap & Google Newsプラグイン 1

WordPress用のXMLサイトマップ出力用プラグインについてググると、定番のGoogle XML Sitemaps (XML Sitemaps)と共にXML Sitemap & Google Newsがヒットする。「がとらぼ」でも幾つか関連記事を書いている。が、Google XML Sitemapsプラグインは数年放置された後に2022年春にWordPress公式のプラグインリストから消え、すぐに復活したもののメンテナがシレッと替わっていて変な機能が追加した新バージョンをリリースして訝しく思った。そこで5月末のことだが「がとらぼ」ではXMLサイトマップ出力プラグインを乗り換えた。その後Google XML Sitemapsの変な機能に見えた部分は直ぐに修正され2022年7月現在は怪しさはほぼ無い感じ。メンテナは元々ころころ変わるプラグインだったし。結局、1ヶ月経たずにGoogle XML Sitemaps (XML Sitemaps)に戻すことになったのだが・・・

XMLサイトマップ出力用のプラグインを乗り換える前にXMLサイトマップを出力するときに何が求められるか整理してみた。

  • 記事が更新された際にそれを知らせたいという意味で更新日時のlastmodタグが出力されること。
  • 子サイトマップを出力できること。(単独サイトマップに全件URL掲載はイヤ)
  • 任意の記事やカテゴリをサイトマップから除外できること。
  • 静的/動的出力は問わず。

条件が多いわけではなく比較的皆が求めそうな条件だがWordPressのプラグインでXMLサイトマップ出力専用という条件で絞った上の条件に当てはまるのを探すと意外と少ないみたい。

WordPressのプラグイン検索のレビュー、日本語のWordPress関連のブログ、Twitterでサイトマップ関連のツイートを見たところ、XML Sitemap & Google Newsが比較的条件に合ってた。導入数もGoogle XML Sitemapsほどではないにしても多めで評判も良く?推す人が多いみたい。
そこで「がとらぼ」でもGoogle XML Sitemapsプラグインから乗り換えてみた。(2022年5月末〜6月の1ヶ月弱ほど)

XML Sitemap & Google Newsプラグイン 2
XML Sitemap & Google Newsプラグインの設定はWordPressのアドミンパネルの左列から「設定」「XMLサイトマップ」にある。設定可能な項目は多くないが「投稿」の子マップを年別/月別にする程度は自身のサイトに適切なものに変更する。「優先度」はGoogleさんは参考にしないようなのでどうでも良い。サイトによっては固定ページはサイトマップに含めないという選択もあるかも。

XML Sitemap & Google Newsプラグイン 3
サイトマップインデックス(親サイトマップ)をブラウザで表示してみる。URLは https://example.com/sitemap.xml のようなの。example.comは自身のウェブサイトのトップURLに読み替えてください。サイトマップインデックスなので、そこに並ぶのは子サイトマップのURL。例えば投稿記事を月別で子サイトマップに出力する設定であればこの画像のように月別で /sitemap-posttype-post.年4桁月2桁.xml というURLが並ぶ。2022年3月であれば、/sitemap-posttype-post.202203.xml になる。今回はこの2022年3月の子サイトマップのリンクをクリックしてみる。

XML Sitemap & Google Newsプラグイン 4
2022年3月に公開した「投稿」記事のページURLが並ぶ。XML Sitemap & Google Newsは標準で記事の更新日時(Last Modified)が付くのが嬉しい。
で、WordPressのテーマを弄っていない場合、WordPressの動作試験用と自作テーマのサンプル用に用意しているテストサイトで2022年3月に公開した記事の全件数は画像のように14個。

WordPressでウェブサイトを公開していて、記事が著しく増えたとき、特殊なカテゴリの記事を扱うことになったとき、年別や月別のアーカイブ一覧表示から特定のカテゴリーの記事は取り除きたいということは結構ある筈。WordPressでは通常とは違う抽出条件のフィルターを作成してテーマに仕込むことで簡単に実現できる。

WordPress-Path/wp-content/themes/使用中のテーマ/functions.php
function bny_custom_pre_get_posts( $query ) {
    if ( is_admin() || ! $query->is_main_query() ){
        return;
    }
     //↓アーカイブで特定のカテゴリー常にを除く場合は $query->is_archive() 月別/年別/日別/時間別アーカイブは$query->is_date()
    if ( $query->is_date() ) {
        $query->set('cat', '-5'); //←はカテゴリID 5を除外 複数はカンマで区切る 除外時はマイナスID、含める場合はマイナス無し
        //$query->set('posts_per_page', 16);
    }
}
add_action('pre_get_posts', 'bny_custom_pre_get_posts');

この例では年別/月別/日別/時間別のアーカイブリストからカテゴリID 5に含まれる投稿記事を除外する。
カテゴリ名やカテゴリのスラッグでは指定できないので注意。管理パネルの「投稿」→「カテゴリ」で、カテゴリの名前のリンクを取得するとそのリンクに含まれる「ID=(数字)」というのがそれ。
例: https://example.com/wp-admin/term.php?taxonomy=category&tag_ID=5&post_type=post・・・ ←この例だとID=5 なのでカテゴリIDは5ということ。

XML Sitemap & Google Newsプラグイン 5
テーマで年別/月別/日別/時間別アーカイブ一覧から特定のカテゴリの表示を除外したら、何故か「投稿」の月別子サイトマップからもそのカテゴリの記事のURLが消えてしまった。こんな挙動はGoogle XML SitemapsプラグインはもちろんWordPress標準のXMLサイトマップ出力機能でも発生しないのでXML Sitemap & Google Newsプラグインの考慮漏れと思われる。テーマをこれまでもこれからも一切イジらないと誓っているサイトオーナーさんであれば問題無いともいえるが、ウェブサイトを発展させたいと思ったらテーマにもいつか何処かに何らかの手を入れることもあるかと思うので、このような思わぬところで予想外の挙動をするというのは本当に困る。

XML Sitemap & Google Newsプラグイン 6
上の続きだが、月別の子サイトマップを出力するようにしていたとして、ある月のサイトマップに含まれる記事が全て除外対象のカテゴリであったとしたら、常識的にはその月の子サイトマップは空であるとかその月の子サイトマップ自体が「無い」ということになるだろう。
しかし、XML Sitemap & Google Newsプラグインの場合は、子サイトマップが空ではなくウェブサイトのトップページのURLが1つ含まれた状態になる。これは意味がわからなすぎる。

例えばGoogleのSearch Console (通称サチコ)にXMLサイトマップのURLを登録すると、インテックスサイトマップ(親サイトマップ)と子サイトマップを毎日かときどきかはサイトによるかもしれないが、とにかくしょっちゅうサイトマップを読みに来る。サイトマップ出力プラグインを変更するとサイトマップインデックスと子サイトマップのURLが変わることになる。(サイトマップインデックスはsitemap.xmlであることが多いのでこの場合は変わらないかも)
サイトマップのURLが変わった場合は、新しいサイトマップのURLが登録されてそのサイトマップを読みに来るが、旧サイトマップも暫くは読みに来る。暫くというのがいつまでかは不明だが「がとらぼ」ではサイトマップのURLが変わって1ヶ月後に旧サイトマップを読もうとロボットが来ていた。
WordPress標準のXMLサイトマップ出力機能を使うのをやめてXML Sitemap & Google Newsプラグインを導入する場合と、他のXMLサイトマップ出力プラグインからXML Sitemap & Google Newsプラグインに乗り換える場合を考えた。

XML Sitemap & Google Newsプラグイン 7
先ずは、WordPress標準のXMLサイトマップ出力機能からXML Sitemap & Google Newsプラグインに乗り換えた場合。
WordPress標準のXMLサイトマップ出力機能の投稿記事系の子サイトマップはwp-sitemap-posts-post-数字.xml。このURLはXML Sitemap & Google Newsプラグインでは使われない。アクセスされた場合はエラー404 (クリエストされたページが無い)になるので正常。

XML Sitemap & Google Newsプラグイン 8
Google XML SitemapsプラグインからXML Sitemap & Google Newsプラグインに乗り換えた場合。
Google XML Sitemapsプラグインの投稿系月別の子サイトマップのURLはsitemap-pt-post-年4桁-月2桁.xml。このURLはXML Sitemap & Google Newsプラグインでは使われない。なら、WordPress標準のXMLサイトマップの子サイトマップと同じくエラー404になるかと思いきやエラー500になる。これはサーバー内部エラーなのでちょっと問題。(次へ)

XML Sitemap & Google Newsプラグイン 9
不思議なことにGoogle XML SitemapsプラグインからXML Sitemap & Google Newsプラグインに乗り換えたサイトオーナーの多くが何故かこのサーバー内部エラーはGoogle XML Sitemapsプラグインの残骸か何かが悪さをしていると考えるみたい。(残骸なんて無いんだけど)
実は、XML Sitemap & Google Newsプラグインのバグで、/sitemap-○○.xmlというURLでアクセスされた場合、それがXML Sitemap & Google Newsプラグインが使っているURLでない場合は全てサーバー内部エラーになる。
画像では/sitemap-test.xmlをブラウザで表示しようとしたもの。XML Sitemap & Google Newsプラグインが出力するサイトマップのURLではないのでサーバー内部エラーになっている。

XML Sitemap & Google Newsプラグイン 9A
XML Sitemap & Google Newsプラグイン変更前のサイトマップをGoogleボットさんが読みに来ると内部サーバーエラーになるのだが、するとサチコに警告やエラーが表示される。サチコの警告やエラーって初心者ほど無視しているが、ベテランになるほど気にするようなので警告が来ると心がザワザワするのよね。実害はないけど。
ちなみに、このエラー2つはGoogle XML SitemapsプラグインのサイトマップのURLがXML Sitemap & Google Newsプラグインのバグでサーバー内部エラーになったものだが、Google XML Sitemapsプラグインに戻した後もかなりの長期間消えずに残るエラーになる。というのも、Google XML SitemapsプラグインのサイトマップはHTTPヘッダにnoindexを付けている(サイトマップとしては好ましい動作)のでGoogleさんが再評価に訪れてもnoindexを見て諦めてしまう。評価されないとエラーが解消したと判断して貰えないのでエラー状態が継続する。サイトマップは検索インデックスに登録するものではないのでエラーであり続けても問題はないけど気分は甚だ悪い。

XML Sitemap & Google Newsプラグイン 10
次は再現が難しくてどうすれが必ずこうなるというのが言えなくてもどかしいのだが、パーマリンクの変更とURLリライト周りで挙動がヘンになることがある。このときに発生する異常は実害があるといっても良いかもしれない。
この画像は正常時のサイトマップインデックス(親サイトマップ)。
含まれる子サイトマップのURLは/sitemap-○○.xmlという形式。

XML Sitemap & Google Newsプラグイン 11
パーマリンクを変更した際などに必ず発生するわけではないけどときどき異常になることがあるっぽい。異常が発生した場合は再度パーマリンクの設定をし直すなどで正常になるようだが、それまで異常は続くっぽい。パーマリンクの変更自体は頻度が低い、或いは変更なんかすることはないかもしれない。ただ、変更した場合にまさかサイトマップの出力が異常になることがあるとは普通は思わないから気付きにくいしやっかい。
異常時は、子サイトマップのURLは /?feed=sitemap-○○○ というものになる。これはXML Sitemap & Google Newsプラグインが出力するサイトマップの実身URLっぽいが、このURLが表示されてしまうのは問題。

XML Sitemap & Google Newsプラグイン 12
さらに、サイトマップインデックスから子サイトマップのリンクを開くと、リンクに含まれる年別/月別を指定するURLパラメータが何故か削られてしまう。つまり年別/月別の指定が外れたことになり、全期間/全件表示になる。この状態でブラウザのURL入力欄に年別/月別のURLパラメータを手入力で追加しても[Enter]でページ表示時点でやはりそのURLパラメータが削られるのでそういう処理になってるらしい。
完全に異常だがURLリライトルールに問題があるとこのような症状になると診断している。このリライトルールはApacheであれば.htaccessのものとかではなく、Wordpressのデータベースのwp_optionsテーブルにあるrewrite_rulesかもしれないし、プラグインが持っているものか或いは両方かも。

このプラグインのURLリライトルール更新の処理に問題があるっぽい。

最後のバグは必ず発生するとはかぎらないのでトラブル率は低いかもしれない。ウェブサーバがNginxで location / { try_files $uri $uri/ /index.php?$args; } が無い場合に発生しやすいが、この指定が無いとパーマリンクの変更でWordPressの記事表示関係のリンクがほぼ全滅になる筈。パーマリンクの変更は迂闊に行わない方が良いので、このエラーを発生させるために変更するのはオススメしません。

XML Sitemap & Google Newsプラグインは個別の投稿/固定ページの編集画面で「XMLサイトマップに含めない」や「優先度」を指定できます。このような指定の仕方なので容易に想像が付きますが、WordPressのデータベースの wp_postmeta テーブルに情報が書き込まれます。meta_keyカラムが _xmlsf_exclude (XMLサイトマップに含めない), _xmlsf_priority (優先度), _xmlsf_image_featured (アイキャッチ画像), 不明(添付画像)のレコードが書き込まれることになります。試した範囲ではXML Sitemap & Google Newsプラグインの無効化で_xmlsf_exclude以外が削除、XML Sitemap & Google Newsプラグインの削除(管理パネルのプラグインリストから削除をクリックした場合)で_xmlsf_excludeを含む全ての関連レコードが削除されるようです。ゴミデータを残さないので行儀は良いといえます。

ただし、wp_optionsテーブルには数個のゴミを残すので適宜削除しましょう。

ブログやツイッターで、何故それが良いのか褒める理由或いは少なからず存在する筈の問題点を説明無しにとにかく「○○がオススメです」って書かれているの見て、それを真に受けるのは止した方が良いというのがXML Sitemap & Google Newsプラグインを導入してみて思ったことです。

導入は簡単なので、小規模のウェブサイトで未来永劫テーマによるカスタマイズは行わないということであれば問題は表面化しないでしょうから導入してみるのが絶対ダメとは言いません。オススメはしませんが

関連記事:
Up