On March 4 the Russian newspaper Novaya Gazeta announced that it would be discontinuing its coverage of the war in Ukraine after the Kremlin criminalized reporting on the topic:

Russia’s Novaya Gazeta newspaper, whose editor Dmitry Muratov was a co-winner of last year’s Nobel Peace Prize, said on Friday it would remove material on Russia’s military actions in Ukraine from its website because of censorship. The newspaper said it would continue to report on the consequences that Russia is facing, including a deepening economic crisis and the persecution of dissidents. – Reuters

Novaya Gazeta had to choose between completely shutting down or starting to censor their own news coverage. Doing otherwise would mean their reporters would be risking imprisonment or worse (seven of their journalists have been murdered since 2000).

So how has this new law shaped Navaya Gazeta’s reporting?

The Internet Archive’s Wayback Machine has good archival coverage of Novaya Gazeta novayagazeta.ru. The Internet Archive’s CDX API is a web service that allows you to programmatically query the archive to see what article URLs existed prior to the crackdown. So it should be a simple matter of testing each URL in the list to see if it’s available on the web right?

It turns out it’s a little bit trickier than that, but basically yes. Keep reading if you are interested in learning how to use the Wayback Machine to find removed content, and what 95 of the removed Novaya Gazeta articles are.

Article URLs

First of all there are many types of resources from the novayagazeta.ru website stored in the Internet Archive. The CDX API lets you limit by a URL prefix, date and also the content type, to hone in on pages instead of images, video, JavaScript or CSS.

The Novaya Gazeta has been around for almost 30 years, so there is a lot of content in the Internet Archive that is no longer on the novayagazeta.ru website because of site redesigns, CMS changes, etc. So it’s important to look at recently archived content, for example from 2020 onwwards.

import wayback
import datetime

wb = wayback.WaybackClient()

# search Wayback for archived HTML pages at novayagazeta.ru
results = wb.search(
    url='https://novayagazeta.ru/articles/',
    matchType='prefix',
    from_date=datetime.date(2020, 1, 1),
    filter_field='mimetype:text/html'
)

# collect the unique URLs that are found
urls = set()
for record in results:
    urls.add(record.url)

When I ran this today it yielded 64,146 URLs. Each article URL looks something like:

https://novayagazeta.ru/articles/2022/03/19/minoborony-rf-vpervye-zaiavilo-o-primenenii-giperzvukovogo-oruzhiia-v-khode-boevykh-deistvii-v-ukraine-news

It’s possible to narrow this list down further by removing URLs that have tracking parameters in a query string. It’s also possible to limit to articles that were published in 2022. This reduces the list that needs to be checked to 2,875 URLs. You an see this Jupyter notebook for the details.

Missing Articles

Checking if the URL is available or not on the live novayagazeta.ru website is not as simple as it could be. Usually a webserver will respond with a 404 Not Found when it is asked for a page that it doesn’t know about. But it appears that novayagazeta.ru responds with with a 200 OK message even when the page is not found. This is actually not that unusual on the web, and is one of the reasons why research into linkrot is so tricky.

To make matters worse the HTML that the server responds with doesn’t contain a not found message. The page is dynamically generated–it contains JavaScript code that needs to be executed which then in turn creates the not found message you see in your browser:

So in order to check these URLs it’s necessary to use a browser that will execute the JavaScript and then look for the “page missing” text in the rendered page. Since I was working in a Jupyter notebook I opted to use the pyppeteer library to drive a headless Chromium browser to visit each URL, and then look to see if the page had the missing message in it.

import pyppeteer

async def check(urls):
    missing = []
    browser = await pyppeteer.launch()
    page = await browser.newPage()
    for url in urls:
        await page.goto(url, {'waitUntil': 'networkidle2'})
        content = await page.evaluate('document.body.textContent', force_expr=True)
        is_missing = 'Ошибка. Похоже, вы перешли по неправильной ссылке. Попробуйте найти материал через поиск на сайте или сообщите нам через ctrl+enter, если что-то сломалось.' in content
        if is_missing:
            missing.append(url)
    await browser.close()
    return missing

results = await check(urls)

Running this found 196 articles (6.8%) which were no longer available on the novayagazeta.ru website. To further understand these it is possible to use a similar technique with the browser to look up these 196 URLs to find the Wayback Machine URL to view the archived page, and to extract the title from the page. This yielded these results:

Missing Archives

One thing that pops out when you scroll the table over and look at the title column is that “Новая Газета - novayagazeta.ru” repeats for 63 of them. For example:

https://web.archive.org/web/20220111140927/https://novayagazeta.ru/articles/2022/01/11/espch-pri

These are incomplete archival snapshots where only part of the page was archived. This highlights why quality assurance is such a difficult and labor intensive part of web archiving practice.

In addition there are 31 rows where the wayback_url is empty. For example:

https://web.archive.org/web/20220306115321/https://novayagazeta.ru/articles/2022/02/24/my-budem-stremitsia-k-demilitarizatsi

These are cases where the only snapshot in the Internet Archive appeared to be the missing pages. The snapshot wasn’t created in time before it was removed. Or, perhaps in some cases the URL never existed on the Novaya Gazeta website. It’s hard to say which without looking in other web archives.

The List

So, that was a bit more work than expected, but here is a final list of 95 articles from the Novaya Gazeta website published in 2022 that appear to have been removed. The big caveat here is that this is not a complete list, because not all the articles may have been archived by the Internet Archive, and my analysis only looked at articles published in 2022 (perhaps older articles have been removed as well). Novaya Gazeta are the only ones who know the real list of removed articles.

  1. «Кричать от боли все будут на одном языке»: более тысячи российских медиков потребовали прекратить войну с Украиной
  2. Юлия Латынина: Мир просто разделится на свободных — и нас Какая часть Украины останется свободной — зависит от украинских войск. Но для России, боюсь, все кончено
  3. Зеленский: российские войска пытаются захватить Чернобыльскую АЭС
  4. «Русские солдаты, не стреляйте!» Спецвыпуск «Продолжение следует» — с журналистами из Киева
  5. Более 500 тысяч человек потребовали остановить войну с Украиной
  6. Нейтралитет не означает смотреть в другую сторону Впервые в своей истории нейтральная Швейцария присоединилась к санкциям против воюющего государства
  7. Второй день войны. Краткие итоги Российские войска уже под Киевом, Запад объявил новую порцию санкций, Путин предложил ВСУ «брать власть» в Украине, Зеленский назвал число погибших
  8. На Запорожской АЭС начался пожар в ходе военных действий между Россией и Украиной. Это крупнейшая атомная станция Европы
  9. Евросоюз нарушил свои табу Он будет поставлять Украине оружие и военное снаряжение из Европейского фонда мира
  10. Вы знаете, как называется происходящее. День шестой. Главное Бабий яр под обстрелом, «Дождь» и «Эхо Москвы» заблокированы, Харьков бомбят, в России начали признавать потери
  11. Путин наступает на Украину. День девятый. Онлайн Запорожская АЭС загорелась после обстрелов, Борис Джонсон созывает экстренное заседание Совбеза ООН
  12. «Путин — посмертный политический проект» Писатель Дмитрий Быков об Украине и ее будущем
  13. «Апокалипсис» — это книга со счастливым концом Священник Андрей Кордочкин — о кровопролитии в Украине, сострадании и надежде
  14. «Я против этой войны»: Навальный на суде в колонии выступил против проведения Путиным «спецоперации» в «ЛДНР»
  15. Молодые и голодные Репортаж из Армянска на крымской границе с Украиной
  16. Харьков и села возле Чернигова попали под обстрел «Градами» и фугасными бомбами. Десятки погибли и ранены
  17. Спецоперация головного мозга
  18. «В Администрации президента сказали, что этим не занимаются» Мать российского пленного пытается вернуть сына домой
  19. «В России предпочитают думать, что войны нет» Опросы показывают — россияне войны не хотят. Но при этом большинство одобряет воинственные жесты Путина и фразу «можем повторить»
  20. «Здесь школа! Дети и мирные люди! Российские солдаты, не стреляйте!» Что происходит в Киеве на третьи сутки вторжения
  21. «Где Авель, брат твой?» О русских солдатах и зимне-весенней кампании 2022 года
  22. Владимир Зеленский подтвердил взрыв на территории Бабьего Яра
  23. Путин объявил «спецоперацию» в Украине. Онлайн Зеленский разорвал дипотношения с Москвой, российское Минобороны отчиталось об уничтожении 11 украинских аэродромов
  24. Никто ничего не сдает Украина подвергается беспрецедентной российской агрессии, но не делает ни шагу назад. Репортаж из Киева
  25. Непогрешимый сапог Антивоенный протест хотят поставить вне закона
  26. Алгоритмы войны Как могут развиваться военные действия между Россией и Украиной
  27. Больницы в Белгороде перестали принимать гражданских пациентов. Их перепрофилируют для российских военных
  28. Теперь Новое времяисчисление от Физраствора в «Новой газете»
  29. «Войне нет оправданий»: российские журналисты выступили против «спецоперации» в Украине
  30. Путин наступает на Украину. День шестой. Онлайн Обстрелы украинской территории, изоляция России
  31. «Люди проводят день и ночь в бомбоубежищах» Собкор «Новой» о ситуации в Киеве
  32. «Интеллектуал в России сегодня не может позволить себе молчать» Владимир Мирзоев. Монолог для «Новой газеты»
  33. Путин наступает на Украину. День восьмой. Онлайн
  34. Роскоморуэлл О несуществующей грани между «войной» и «военной операцией»
  35. Новая газета - Novayagazeta.ru
  36. Первая жертва «Новичка» Как находки в убийстве банкира Кивелиди раскрывают отравление Навального: подкаст
  37. «Это не та история, когда человек мечтал пойти воевать» Спецкор «Новой» — о российском пленном из Мурманской области: видео
  38. Плюс денацификация всей страны Война миров от Физраствора в «Новой газете»
  39. Йди та дивись Війна розв’язана за кілька годин однією людиною. Шлях до миру стане випробуванням для кожного з нас
  40. «Стыд, мрак и преступление» Голоса людей, которые вышли на антивоенную акцию. Подкаст «Что Нового?»
  41. Марина Влади: «Остановите этот ужас!»
  42. «Готовы ли мы платить кровавую цену за гуманизм?» Писатель Дмитрий Данилов — о том, почему мы не сопротивляемся государственному насилию
  43. «Ночью мои дети идут в домик Феи — прятаться с игрушками в ванной комнате» Как Киев провел выходные при круглосуточном комендантском часе, и что происходит в городах и селах «ДНР»
  44. Иди и смотри Война развязана за несколько часов одним человеком. Путь к миру станет испытанием для каждого из нас
  45. Более 100 мундепов из разных городов России выступили с осуждением «спецоперации» в отношении Украины
  46. Дмитрий Быков. Остров Змеиный «Угодил я на остров Змеиный, а с него отступления нет»
  47. Слава гипножабе!. «Футурама» возвращается после 10-летнего перерыва. Тест на знание вселенной Мэтта Грейнинга
  48. «В автозаке коллектив был чудный!» Просто вдумайтесь: в Петербурге блокадницу задержали на митинге против войны. «Новая» с ней поговорила
  49. За что будем платить и стоит ли оно того? О цене военной спецоперации в Украине для российских потребителей
  50. Зеленский заявил о 6000 погибших россиян в результате боевых действий в Украине. Минобороны РФ не раскрывает данные о потерях
  51. Путин ведет войну с Украиной. День второй. Онлайн Роскомнадзор пытается частично ограничить доступ к Facebook, членство России в Совете Европы приостановили
  52. «Оставьте в покое мою Украину…» Публикуем стихи известного киевского поэта Александра Кабанова — о войне, которой пропитан воздух
  53. «Они там будут» Лукашенко утверждает, что если будет нужно России и Беларуси, то белорусские войска тоже придут в Украину
  54. «За украинцев переживаем. И за солдатиков наших больше всего» Не война, а «спецоперация» проходит насквозь старинный русский город Рыльск
  55. Путин ведет войну с Украиной. День четвертый. Онлайн Отключение российских банков от SWIFT, взрывы и обстрелы в городах Украины
  56. «Я не знаю, как можно не выступать против войны» Россияне, уже выступившие с антивоенными заявлениями, рассказывают, почему молчать сейчас — страшнее, чем говорить
  57. Более 160 лауреатов Нобелевской премии призвали Россию прекратить военные действия в Украине
  58. «Мы ищем молитву, которая считает войну преступлением» Слово священнику Алексею Уминскому
  59. Антивоенные протесты в России. Фотографии Вечером 24 февраля в российских городах прошли массовые акции против войны с Украиной. Задержано 1816 человек*
  60. «У Росії вважають за краще думати, що війни немає» Опитування демонструють — росіяни війни не хочуть. Але при цьому більшість схвалює войовничі жести Путіна та фразу «можемо повторити»
  61. Солдат Иванов О пленном из Мурманской области, в существование которого не хотят верить
  62. Почему это стало возможным Реквием по государству Российскому
  63. «Мама, я тебя люблю, если будет похоронка, не верь сразу» Как попадали на «спецоперацию» российские солдаты. И что это за солдаты
  64. Они не врут. Они так думают Вы полагаете, что все это не всерьез? Вот все это: «ядерный пепел», ракеты, летящие во Флориду…
  65. Третий день без перемен Операция на Украине в свете сообщений Министерства обороны России
  66. «Важные истории»: средний возраст высших российских чиновников при Путине вырос до 55 лет. При Брежневе он составлял 55,9 года
  67. Путин ведет войну с Украиной. День третий. Онлайн Армия РФ — в центре Киева. В Харькове — кассетные снаряды. Депутаты ГД высказываются против войны
  68. «Аргументировали кражей детей бандеровцами»
  69. «У женщины пятеро детей, а рядом с ее домом снаряд валяется» Как население полуострова переживает «спецоперацию» в Украине
  70. «Наше государство ведет себя, как зарвавшийся гопник!» Российские музыканты, артисты, художники — о войне, которой не может быть
  71. Путин ведет войну с Украиной. День пятый. Онлайн Армия России возобновила наступление на Киев, здания Бердянска перешли под контроль войск РФ
  72. «Я не считаю, что не было варианта решить это не таким путем» Интервью Ольги Дячук, сестры взятого в плен на Украине старшего сержанта армии РФ Романа Буганцова
  73. «Комитет солдатских матерей»: солдат-срочников массово «заставляют заключать контракты» и отправляют к границе с Украиной
  74. Российские НКО выступили против войны в Украине
  75. «Путин нас и народ украинский не даст в обиду»
  76. «Специальная военная операция» на территории Украины. Интерактивная карта Обстрелы, бомбовые удары, подрывы и штурм — «горячие точки»
  77. Боль. Страх. Стыд Людмила Улицкая против войны на Украине
  78. «Важные истории»: экс-глава Роскомнадзора Жаров стал зарабатывать 1 млн рублей в день после перехода в «Газпром-медиа». Там он занимается «развитием» RuTube
  79. Пятый окаянный день. Вооруженный конфликт в Украине продолжается. Главное Переговоры кончились ничем, жилые кварталы Харькова под обстрелом «Градов», на Киев вновь падают ракеты
  80. Ростов прифронтовой Как проживает вторжение самый близкий к войне российский город
  81. Похоронка есть, могилу выкопали, а тело не привезли Мать солдата добивается возможности похоронить погибшего сына: «Сказали, не отдадут, чтобы не создавать паники»
  82. …Из защитников в нападающие Телепропагандисты приближали этот день как могли
  83. Путин наступает на Украину. День седьмой. Онлайн Авиаудары по украинским городам, десятки погибших, изоляция России
  84. В России продолжаются антивоенные протесты. Фоторепортаж Четвертый день подряд в городах проходят акции против военных действий в Украине. Задержаны больше 2000 человек*
  85. «Вопрос о сборе тел погибших не стоит. Они лежат не преданные земле» Речь сенатора Людмилы Нарусовой — о том, что нам цинично запретили называть своим именем
  86. «Мы ни в чем не виноваты. Это власти, чтоб они провалились!» Война пришла и в российские города. Репортаж из Белгорода и его окрестностей, которые теперь подвергаются обстрелам
  87. «Война — это грязь» Репортаж из приграничного Таганрога в последние часы перед вторжением
  88. «Явное неуважение к обществу и государству РФ» Россиян массово увольняют с работы из-за антивоенной позиции
  89. «Пехота Путина» в Украине Каковы задачи частей Росгвардии, укомплектованных «кадыровцами»: объясняет военный эксперт
  90. Не убивать, не разрушать. Соединять Открытое письмо российских аниматоров в связи с военной кампанией против Украины
  91. Турция закрыла проливы Босфор и Дарданеллы для прохода военных кораблей Украины и России
  92. Юрьев день Почему сегодня роман-утопия «Третья империя: Россия, которая должна быть» (2006 г.) читается как лента российских новостей
  93. Налог на «спецоперацию» За военный конфликт России и Украины простые граждане отвечают кошельками: обзор цен в магазинах и на рынках страны от собкоров «Новой газеты»
  94. Войны нет, можно и повеселиться Пока на украинской земле гибнут люди, в Приморье устроили масленичные гулянья «с шутками-прибаутками»
  95. Антивоенные движения Как москвичи протестовали против вторжения в Украину

I cannot read Russian, so I spent a little time spot checking some of these in Google Translate. It wasn’t entirely clear to me that all of them were about the Ukraine, but several of them did appear to be. If you do understand Russian and have some time to analyze them please let me know and I will link out to you.